mirror of
https://github.com/tribufu/node-gamedig
synced 2026-06-01 09:42:41 +00:00
Super epic commit 3
Move everything around Add another 50 or so games *** 'port' option should now be CONNECT port, not query port *** add reference for many missing games
This commit is contained in:
parent
8488cdcca9
commit
bc6b5c9225
64 changed files with 2071 additions and 430 deletions
5
reference/LICENSE
Normal file
5
reference/LICENSE
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
The files in this folder are INDIVIDUALLY LICENSED.
|
||||
The applicable license is located in the header of each individual file.
|
||||
These files are not covered by the node-GameDig project license.
|
||||
The source of node-GameDig does not use or execute the content of
|
||||
any file of this folder, and maintains a separate, unrelated license.
|
||||
70
reference/cs2d.txt
Normal file
70
reference/cs2d.txt
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
function lgsl_query_29(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
// REFERENCE: http://www.cs2d.com/servers.php
|
||||
|
||||
if ($lgsl_need['s'] || $lgsl_need['e'])
|
||||
{
|
||||
$lgsl_need['s'] = FALSE;
|
||||
$lgsl_need['e'] = FALSE;
|
||||
|
||||
fwrite($lgsl_fp, "\x01\x00\x03\x10\x21\xFB\x01\x75\x00");
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
$buffer = substr($buffer, 4); // REMOVE HEADER
|
||||
|
||||
$server['e']['bit_flags'] = ord(lgsl_cut_byte($buffer, 1)) - 48;
|
||||
$server['s']['name'] = lgsl_cut_pascal($buffer);
|
||||
$server['s']['map'] = lgsl_cut_pascal($buffer);
|
||||
$server['s']['players'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['playersmax'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['gamemode'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['bots'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
|
||||
$server['s']['password'] = ($server['e']['bit_flags'] & 1) ? "1" : "0";
|
||||
$server['e']['registered_only'] = ($server['e']['bit_flags'] & 2) ? "1" : "0";
|
||||
$server['e']['fog_of_war'] = ($server['e']['bit_flags'] & 4) ? "1" : "0";
|
||||
$server['e']['friendlyfire'] = ($server['e']['bit_flags'] & 8) ? "1" : "0";
|
||||
}
|
||||
|
||||
if ($lgsl_need['p'])
|
||||
{
|
||||
$lgsl_need['p'] = FALSE;
|
||||
|
||||
fwrite($lgsl_fp, "\x01\x00\xFB\x05");
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
$buffer = substr($buffer, 4); // REMOVE HEADER
|
||||
|
||||
$player_total = ord(lgsl_cut_byte($buffer, 1));
|
||||
|
||||
for ($i=0; $i<$player_total; $i++)
|
||||
{
|
||||
$server['p'][$i]['pid'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['p'][$i]['name'] = lgsl_cut_pascal($buffer);
|
||||
$server['p'][$i]['team'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['p'][$i]['score'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "l");
|
||||
$server['p'][$i]['deaths'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "l");
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
168
reference/cube.txt
Normal file
168
reference/cube.txt
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
function lgsl_query_24(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
// REFERENCE: http://cubelister.sourceforge.net
|
||||
|
||||
fwrite($lgsl_fp, "\x21\x21");
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
$buffer = substr($buffer, 2); // REMOVE HEADER
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
if ($buffer[0] == "\x1b") // CUBE 1
|
||||
{
|
||||
// RESPONSE IS XOR ENCODED FOR SOME STRANGE REASON
|
||||
for ($i=0; $i<strlen($buffer); $i++) { $buffer[$i] = chr(ord($buffer[$i]) ^ 0x61); }
|
||||
|
||||
$server['s']['game'] = "Cube";
|
||||
$server['e']['netcode'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['gamemode'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['players'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['timeleft'] = lgsl_time(ord(lgsl_cut_byte($buffer, 1)) * 60);
|
||||
$server['s']['map'] = lgsl_cut_string($buffer);
|
||||
$server['s']['name'] = lgsl_cut_string($buffer);
|
||||
$server['s']['playersmax'] = "0"; // NOT PROVIDED
|
||||
|
||||
// DOES NOT RETURN PLAYER INFORMATION
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
elseif ($buffer[0] == "\x80") // ASSAULT CUBE
|
||||
{
|
||||
$server['s']['game'] = "AssaultCube";
|
||||
$server['e']['netcode'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['version'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
$server['e']['gamemode'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['players'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['timeleft'] = lgsl_time(ord(lgsl_cut_byte($buffer, 1)) * 60);
|
||||
$server['s']['map'] = lgsl_cut_string($buffer);
|
||||
$server['s']['name'] = lgsl_cut_string($buffer);
|
||||
$server['s']['playersmax'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
}
|
||||
|
||||
elseif ($buffer[1] == "\x05") // CUBE 2 - SAUERBRATEN
|
||||
{
|
||||
$server['s']['game'] = "Sauerbraten";
|
||||
$server['s']['players'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$info_returned = ord(lgsl_cut_byte($buffer, 1)); // CODED FOR 5
|
||||
$server['e']['netcode'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['version'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
$server['e']['gamemode'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['timeleft'] = lgsl_time(ord(lgsl_cut_byte($buffer, 1)) * 60);
|
||||
$server['s']['playersmax'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['password'] = ord(lgsl_cut_byte($buffer, 1)); // BIT FIELD
|
||||
$server['s']['password'] = $server['s']['password'] & 4 ? "1" : "0";
|
||||
$server['s']['map'] = lgsl_cut_string($buffer);
|
||||
$server['s']['name'] = lgsl_cut_string($buffer);
|
||||
}
|
||||
|
||||
elseif ($buffer[1] == "\x06") // BLOODFRONTIER
|
||||
{
|
||||
$server['s']['game'] = "Blood Frontier";
|
||||
$server['s']['players'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$info_returned = ord(lgsl_cut_byte($buffer, 1)); // CODED FOR 6
|
||||
$server['e']['netcode'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['version'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
$server['e']['gamemode'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['mutators'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['timeleft'] = lgsl_time(ord(lgsl_cut_byte($buffer, 1)) * 60);
|
||||
$server['s']['playersmax'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['password'] = ord(lgsl_cut_byte($buffer, 1)); // BIT FIELD
|
||||
$server['s']['password'] = $server['s']['password'] & 4 ? "1" : "0";
|
||||
$server['s']['map'] = lgsl_cut_string($buffer);
|
||||
$server['s']['name'] = lgsl_cut_string($buffer);
|
||||
}
|
||||
|
||||
else // UNKNOWN
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
// CRAZY PROTOCOL - REQUESTS MUST BE MADE FOR EACH PLAYER
|
||||
// BOTS ARE RETURNED BUT NOT INCLUDED IN THE PLAYER TOTAL
|
||||
// AND THERE CAN BE ID GAPS BETWEEN THE PLAYERS RETURNED
|
||||
|
||||
if ($lgsl_need['p'] && $server['s']['players'])
|
||||
{
|
||||
$player_key = 0;
|
||||
|
||||
for ($player_id=0; $player_id<32; $player_id++)
|
||||
{
|
||||
fwrite($lgsl_fp, "\x00\x01".chr($player_id));
|
||||
|
||||
// READ PACKET
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
if (!$buffer) { break; }
|
||||
|
||||
// CHECK IF PLAYER ID IS ACTIVE
|
||||
if ($buffer[5] != "\x00")
|
||||
{
|
||||
if ($player_key < $server['s']['players']) { continue; }
|
||||
break;
|
||||
}
|
||||
|
||||
// IF PREVIEW PACKET GET THE FULL PACKET THAT FOLLOWS
|
||||
if (strlen($buffer) < 15)
|
||||
{
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
if (!$buffer) { break; }
|
||||
}
|
||||
|
||||
// REMOVE HEADER
|
||||
$buffer = substr($buffer, 7);
|
||||
|
||||
// WE CAN NOW GET THE PLAYER DETAILS
|
||||
if ($server['s']['game'] == "Blood Frontier")
|
||||
{
|
||||
$server['p'][$player_key]['pid'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "C");
|
||||
$server['p'][$player_key]['ping'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "C");
|
||||
$server['p'][$player_key]['ping'] = $server['p'][$player_key]['ping'] == 128 ? lgsl_unpack(lgsl_cut_byte($buffer, 2), "S") : $server['p'][$player_key]['ping'];
|
||||
$server['p'][$player_key]['name'] = lgsl_cut_string($buffer);
|
||||
$server['p'][$player_key]['team'] = lgsl_cut_string($buffer);
|
||||
$server['p'][$player_key]['score'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "c");
|
||||
$server['p'][$player_key]['damage'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "C");
|
||||
$server['p'][$player_key]['deaths'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "C");
|
||||
$server['p'][$player_key]['teamkills'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "C");
|
||||
$server['p'][$player_key]['accuracy'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "C")."%";
|
||||
$server['p'][$player_key]['health'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "c");
|
||||
$server['p'][$player_key]['spree'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "C");
|
||||
$server['p'][$player_key]['weapon'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "C");
|
||||
}
|
||||
else
|
||||
{
|
||||
$server['p'][$player_key]['pid'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "C");
|
||||
$server['p'][$player_key]['name'] = lgsl_cut_string($buffer);
|
||||
$server['p'][$player_key]['team'] = lgsl_cut_string($buffer);
|
||||
$server['p'][$player_key]['score'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "c");
|
||||
$server['p'][$player_key]['deaths'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "C");
|
||||
$server['p'][$player_key]['teamkills'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "C");
|
||||
$server['p'][$player_key]['accuracy'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "C")."%";
|
||||
$server['p'][$player_key]['health'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "c");
|
||||
$server['p'][$player_key]['armour'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "C");
|
||||
$server['p'][$player_key]['weapon'] = lgsl_unpack(lgsl_cut_byte($buffer, 1), "C");
|
||||
}
|
||||
|
||||
$player_key++;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
58
reference/freelancer.txt
Normal file
58
reference/freelancer.txt
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------+
|
||||
//------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
function lgsl_query_14(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
// REFERENCE: http://flstat.cryosphere.co.uk/global-list.php
|
||||
|
||||
fwrite($lgsl_fp, "\x00\x02\xf1\x26\x01\x26\xf0\x90\xa6\xf0\x26\x57\x4e\xac\xa0\xec\xf8\x68\xe4\x8d\x21");
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$buffer = substr($buffer, 4); // HEADER ( 00 03 F1 26 )
|
||||
$buffer = substr($buffer, 4); // NOT USED ( 87 + NAME LENGTH )
|
||||
$buffer = substr($buffer, 4); // NOT USED ( NAME END TO BUFFER END LENGTH )
|
||||
$buffer = substr($buffer, 4); // UNKNOWN ( 80 )
|
||||
|
||||
$server['s']['map'] = "freelancer";
|
||||
$server['s']['password'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "l") - 1 ? 1 : 0;
|
||||
$server['s']['playersmax'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "l") - 1;
|
||||
$server['s']['players'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "l") - 1;
|
||||
$buffer = substr($buffer, 4); // UNKNOWN ( 88 )
|
||||
$name_length = lgsl_unpack(lgsl_cut_byte($buffer, 4), "l");
|
||||
$buffer = substr($buffer, 56); // UNKNOWN
|
||||
$server['s']['name'] = lgsl_cut_byte($buffer, $name_length);
|
||||
|
||||
lgsl_cut_string($buffer, 0, ":");
|
||||
lgsl_cut_string($buffer, 0, ":");
|
||||
lgsl_cut_string($buffer, 0, ":");
|
||||
lgsl_cut_string($buffer, 0, ":");
|
||||
lgsl_cut_string($buffer, 0, ":");
|
||||
|
||||
// WHATS LEFT IS THE MOTD
|
||||
$server['e']['motd'] = substr($buffer, 0, -1);
|
||||
|
||||
// REMOVE UTF-8 ENCODING NULLS
|
||||
$server['s']['name'] = str_replace("\x00", "", $server['s']['name']);
|
||||
$server['e']['motd'] = str_replace("\x00", "", $server['e']['motd']);
|
||||
|
||||
// DOES NOT RETURN PLAYER INFORMATION
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
133
reference/ghostrecon.txt
Normal file
133
reference/ghostrecon.txt
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
|
||||
function lgsl_query_19(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
|
||||
fwrite($lgsl_fp, "\xC0\xDE\xF1\x11\x42\x06\x00\xF5\x03\x21\x21\x21\x21");
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$buffer = substr($buffer, 25); // REMOVE HEADER
|
||||
|
||||
$server['s']['name'] = lgsl_get_string(lgsl_cut_pascal($buffer, 4, 3, -3));
|
||||
$server['s']['map'] = lgsl_get_string(lgsl_cut_pascal($buffer, 4, 3, -3));
|
||||
$server['e']['nextmap'] = lgsl_get_string(lgsl_cut_pascal($buffer, 4, 3, -3));
|
||||
$server['e']['gametype'] = lgsl_get_string(lgsl_cut_pascal($buffer, 4, 3, -3));
|
||||
|
||||
$buffer = substr($buffer, 1);
|
||||
|
||||
$server['s']['password'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['playersmax'] = ord(lgsl_cut_byte($buffer, 4));
|
||||
$server['s']['players'] = ord(lgsl_cut_byte($buffer, 4));
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
for ($player_key=0; $player_key<$server['s']['players']; $player_key++)
|
||||
{
|
||||
$server['p'][$player_key]['name'] = lgsl_get_string(lgsl_cut_pascal($buffer, 4, 3, -3));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$buffer = substr($buffer, 17);
|
||||
|
||||
$server['e']['version'] = lgsl_get_string(lgsl_cut_pascal($buffer, 4, 3, -3));
|
||||
$server['e']['mods'] = lgsl_get_string(lgsl_cut_pascal($buffer, 4, 3, -3));
|
||||
$server['e']['dedicated'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['time'] = lgsl_time(lgsl_unpack(lgsl_cut_byte($buffer, 4), "f"));
|
||||
$server['e']['status'] = ord(lgsl_cut_byte($buffer, 4));
|
||||
$server['e']['gamemode'] = ord(lgsl_cut_byte($buffer, 4));
|
||||
$server['e']['motd'] = lgsl_get_string(lgsl_cut_pascal($buffer, 4, 3, -3));
|
||||
$server['e']['respawns'] = ord(lgsl_cut_byte($buffer, 4));
|
||||
$server['e']['time_limit'] = lgsl_time(lgsl_unpack(lgsl_cut_byte($buffer, 4), "f"));
|
||||
$server['e']['voting'] = ord(lgsl_cut_byte($buffer, 4));
|
||||
|
||||
$buffer = substr($buffer, 2);
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
for ($player_key=0; $player_key<$server['s']['players']; $player_key++)
|
||||
{
|
||||
$server['p'][$player_key]['team'] = ord(lgsl_cut_byte($buffer, 4));
|
||||
|
||||
$unknown = ord(lgsl_cut_byte($buffer, 1));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$buffer = substr($buffer, 7);
|
||||
|
||||
$server['e']['platoon_1_color'] = ord(lgsl_cut_byte($buffer, 8));
|
||||
$server['e']['platoon_2_color'] = ord(lgsl_cut_byte($buffer, 8));
|
||||
$server['e']['platoon_3_color'] = ord(lgsl_cut_byte($buffer, 8));
|
||||
$server['e']['platoon_4_color'] = ord(lgsl_cut_byte($buffer, 8));
|
||||
$server['e']['timer_on'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['timer_time'] = lgsl_time(lgsl_unpack(lgsl_cut_byte($buffer, 4), "f"));
|
||||
$server['e']['time_debriefing'] = lgsl_time(lgsl_unpack(lgsl_cut_byte($buffer, 4), "f"));
|
||||
$server['e']['time_respawn_min'] = lgsl_time(lgsl_unpack(lgsl_cut_byte($buffer, 4), "f"));
|
||||
$server['e']['time_respawn_max'] = lgsl_time(lgsl_unpack(lgsl_cut_byte($buffer, 4), "f"));
|
||||
$server['e']['time_respawn_safe'] = lgsl_time(lgsl_unpack(lgsl_cut_byte($buffer, 4), "f"));
|
||||
$server['e']['difficulty'] = ord(lgsl_cut_byte($buffer, 4));
|
||||
$server['e']['respawn_total'] = ord(lgsl_cut_byte($buffer, 4));
|
||||
$server['e']['random_insertions'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['spectators'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['arcademode'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['ai_backup'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['random_teams'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['time_starting'] = lgsl_time(lgsl_unpack(lgsl_cut_byte($buffer, 4), "f"));
|
||||
$server['e']['identify_friends'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['identify_threats'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
|
||||
$buffer = substr($buffer, 5);
|
||||
|
||||
$server['e']['restrictions'] = lgsl_get_string(lgsl_cut_pascal($buffer, 4, 3, -3));
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
switch ($server['e']['status'])
|
||||
{
|
||||
case 3: $server['e']['status'] = "Joining"; break;
|
||||
case 4: $server['e']['status'] = "Joining"; break;
|
||||
case 5: $server['e']['status'] = "Joining"; break;
|
||||
}
|
||||
|
||||
switch ($server['e']['gamemode'])
|
||||
{
|
||||
case 2: $server['e']['gamemode'] = "Co-Op"; break;
|
||||
case 3: $server['e']['gamemode'] = "Solo"; break;
|
||||
case 4: $server['e']['gamemode'] = "Team"; break;
|
||||
}
|
||||
|
||||
switch ($server['e']['respawns'])
|
||||
{
|
||||
case 0: $server['e']['respawns'] = "None"; break;
|
||||
case 1: $server['e']['respawns'] = "Individual"; break;
|
||||
case 2: $server['e']['respawns'] = "Team"; break;
|
||||
case 3: $server['e']['respawns'] = "Infinite"; break;
|
||||
}
|
||||
|
||||
switch ($server['e']['difficulty'])
|
||||
{
|
||||
case 0: $server['e']['difficulty'] = "Recruit"; break;
|
||||
case 1: $server['e']['difficulty'] = "Veteran"; break;
|
||||
case 2: $server['e']['difficulty'] = "Elite"; break;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
40
reference/gtr2.txt
Normal file
40
reference/gtr2.txt
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
function lgsl_query_15(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
|
||||
fwrite($lgsl_fp, "GTR2_Direct_IP_Search\x00");
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$buffer = str_replace("\xFE", "\xFF", $buffer);
|
||||
$buffer = explode("\xFF", $buffer);
|
||||
|
||||
$server['s']['name'] = $buffer[3];
|
||||
$server['s']['game'] = $buffer[7];
|
||||
$server['e']['version'] = $buffer[11];
|
||||
$server['e']['hostport'] = $buffer[15];
|
||||
$server['s']['map'] = $buffer[19];
|
||||
$server['s']['players'] = $buffer[25];
|
||||
$server['s']['playersmax'] = $buffer[27];
|
||||
$server['e']['gamemode'] = $buffer[31];
|
||||
|
||||
// DOES NOT RETURN PLAYER INFORMATION
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
64
reference/openttd.txt
Normal file
64
reference/openttd.txt
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
function lgsl_query_22(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
|
||||
fwrite($lgsl_fp,"\x03\x00\x00");
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
$buffer = substr($buffer, 3); // REMOVE HEADER
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
$response_type = ord(lgsl_cut_byte($buffer, 1)); // TYPE SHOULD BE 4
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$grf_count = ord(lgsl_cut_byte($buffer, 1));
|
||||
|
||||
for ($a=0; $a<$grf_count; $a++)
|
||||
{
|
||||
$server['e']['grf_'.$a.'_id'] = strtoupper(dechex(lgsl_unpack(lgsl_cut_byte($buffer, 4), "N")));
|
||||
|
||||
for ($b=0; $b<16; $b++)
|
||||
{
|
||||
$server['e']['grf_'.$a.'_md5'] .= strtoupper(dechex(ord(lgsl_cut_byte($buffer, 1))));
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$server['e']['date_current'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "L");
|
||||
$server['e']['date_start'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "L");
|
||||
$server['e']['companies_max'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['companies'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['spectators_max'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['name'] = lgsl_cut_string($buffer);
|
||||
$server['e']['version'] = lgsl_cut_string($buffer);
|
||||
$server['e']['language'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['password'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['playersmax'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['players'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['spectators'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['map'] = lgsl_cut_string($buffer);
|
||||
$server['e']['map_width'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
$server['e']['map_height'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
$server['e']['map_set'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['dedicated'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
|
||||
// DOES NOT RETURN PLAYER INFORMATION
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
33
reference/plainsight.txt
Normal file
33
reference/plainsight.txt
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
function lgsl_query_32(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
|
||||
fwrite($lgsl_fp, "\x05\x00\x00\x01\x0A");
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
$buffer = substr($buffer, 5); // REMOVE HEADER
|
||||
|
||||
$server['s']['name'] = lgsl_cut_pascal($buffer);
|
||||
$server['s']['map'] = lgsl_cut_pascal($buffer);
|
||||
$server['s']['players'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['playersmax'] = 0; // HELD ON MASTER
|
||||
|
||||
// DOES NOT RETURN PLAYER INFORMATION
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
94
reference/rfactor.txt
Normal file
94
reference/rfactor.txt
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
function lgsl_query_16(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
// REFERENCE:
|
||||
// http://www.planetpointy.co.uk/software/rfactorsspy.shtml
|
||||
// http://users.pandora.be/viperius/mUtil/
|
||||
// USES FIXED DATA POSITIONS WITH RANDOM CHARACTERS FILLING THE GAPS
|
||||
|
||||
fwrite($lgsl_fp, "rF_S");
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
// $server['e']['gamename'] = lgsl_get_string($buffer);
|
||||
$buffer = substr($buffer, 8);
|
||||
// $server['e']['fullupdate'] = lgsl_unpack($buffer[0], "C");
|
||||
$server['e']['region'] = lgsl_unpack($buffer[1] .$buffer[2], "S");
|
||||
// $server['e']['ip'] = ($buffer[3] .$buffer[4].$buffer[5].$buffer[6]); // UNSIGNED LONG
|
||||
// $server['e']['size'] = lgsl_unpack($buffer[7] .$buffer[8], "S");
|
||||
$server['e']['version'] = lgsl_unpack($buffer[9] .$buffer[10], "S");
|
||||
// $server['e']['version_racecast'] = lgsl_unpack($buffer[11].$buffer[12], "S");
|
||||
$server['e']['hostport'] = lgsl_unpack($buffer[13].$buffer[14], "S");
|
||||
// $server['e']['queryport'] = lgsl_unpack($buffer[15].$buffer[16], "S");
|
||||
$buffer = substr($buffer, 17);
|
||||
$server['s']['game'] = lgsl_get_string($buffer);
|
||||
$buffer = substr($buffer, 20);
|
||||
$server['s']['name'] = lgsl_get_string($buffer);
|
||||
$buffer = substr($buffer, 28);
|
||||
$server['s']['map'] = lgsl_get_string($buffer);
|
||||
$buffer = substr($buffer, 32);
|
||||
$server['e']['motd'] = lgsl_get_string($buffer);
|
||||
$buffer = substr($buffer, 96);
|
||||
$server['e']['packed_aids'] = lgsl_unpack($buffer[0].$buffer[1], "S");
|
||||
// $server['e']['ping'] = lgsl_unpack($buffer[2].$buffer[3], "S");
|
||||
$server['e']['packed_flags'] = lgsl_unpack($buffer[4], "C");
|
||||
$server['e']['rate'] = lgsl_unpack($buffer[5], "C");
|
||||
$server['s']['players'] = lgsl_unpack($buffer[6], "C");
|
||||
$server['s']['playersmax'] = lgsl_unpack($buffer[7], "C");
|
||||
$server['e']['bots'] = lgsl_unpack($buffer[8], "C");
|
||||
$server['e']['packed_special'] = lgsl_unpack($buffer[9], "C");
|
||||
$server['e']['damage'] = lgsl_unpack($buffer[10], "C");
|
||||
$server['e']['packed_rules'] = lgsl_unpack($buffer[11].$buffer[12], "S");
|
||||
$server['e']['credits1'] = lgsl_unpack($buffer[13], "C");
|
||||
$server['e']['credits2'] = lgsl_unpack($buffer[14].$buffer[15], "S");
|
||||
$server['e']['time'] = lgsl_time(lgsl_unpack($buffer[16].$buffer[17], "S"));
|
||||
$server['e']['laps'] = lgsl_unpack($buffer[18].$buffer[19], "s") / 16;
|
||||
$buffer = substr($buffer, 23);
|
||||
$server['e']['vehicles'] = lgsl_get_string($buffer);
|
||||
|
||||
// DOES NOT RETURN PLAYER INFORMATION
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$server['s']['password'] = ($server['e']['packed_special'] & 2) ? 1 : 0;
|
||||
$server['e']['racecast'] = ($server['e']['packed_special'] & 4) ? 1 : 0;
|
||||
$server['e']['fixedsetups'] = ($server['e']['packed_special'] & 16) ? 1 : 0;
|
||||
|
||||
$server['e']['aids'] = "";
|
||||
if ($server['e']['packed_aids'] & 1) { $server['e']['aids'] .= " TractionControl"; }
|
||||
if ($server['e']['packed_aids'] & 2) { $server['e']['aids'] .= " AntiLockBraking"; }
|
||||
if ($server['e']['packed_aids'] & 4) { $server['e']['aids'] .= " StabilityControl"; }
|
||||
if ($server['e']['packed_aids'] & 8) { $server['e']['aids'] .= " AutoShifting"; }
|
||||
if ($server['e']['packed_aids'] & 16) { $server['e']['aids'] .= " AutoClutch"; }
|
||||
if ($server['e']['packed_aids'] & 32) { $server['e']['aids'] .= " Invulnerability"; }
|
||||
if ($server['e']['packed_aids'] & 64) { $server['e']['aids'] .= " OppositeLock"; }
|
||||
if ($server['e']['packed_aids'] & 128) { $server['e']['aids'] .= " SteeringHelp"; }
|
||||
if ($server['e']['packed_aids'] & 256) { $server['e']['aids'] .= " BrakingHelp"; }
|
||||
if ($server['e']['packed_aids'] & 512) { $server['e']['aids'] .= " SpinRecovery"; }
|
||||
if ($server['e']['packed_aids'] & 1024) { $server['e']['aids'] .= " AutoPitstop"; }
|
||||
|
||||
$server['e']['aids'] = str_replace(" ", " / ", trim($server['e']['aids']));
|
||||
$server['e']['vehicles'] = str_replace("|", " / ", trim($server['e']['vehicles']));
|
||||
|
||||
unset($server['e']['packed_aids']);
|
||||
unset($server['e']['packed_flags']);
|
||||
unset($server['e']['packed_special']);
|
||||
unset($server['e']['packed_rules']);
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
92
reference/samp.txt
Normal file
92
reference/samp.txt
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
|
||||
function lgsl_query_12(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
// REFERENCE:
|
||||
// VICE CITY CURRENTLY ONLY SUPPORTS THE 'i' CHALLENGE
|
||||
|
||||
if ($server['b']['type'] == "samp") { $challenge_packet = "SAMP\x21\x21\x21\x21\x00\x00"; }
|
||||
elseif ($server['b']['type'] == "vcmp") { $challenge_packet = "VCMP\x21\x21\x21\x21\x00\x00"; $lgsl_need['e'] = FALSE; $lgsl_need['p'] = FALSE; }
|
||||
|
||||
if ($lgsl_need['s']) { $challenge_packet .= "i"; }
|
||||
elseif ($lgsl_need['e']) { $challenge_packet .= "r"; }
|
||||
elseif ($lgsl_need['p']) { $challenge_packet .= "d"; }
|
||||
|
||||
fwrite($lgsl_fp, $challenge_packet);
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$buffer = substr($buffer, 10); // REMOVE HEADER
|
||||
|
||||
$response_type = lgsl_cut_byte($buffer, 1);
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
if ($response_type == "i")
|
||||
{
|
||||
$lgsl_need['s'] = FALSE;
|
||||
|
||||
$server['s']['password'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['players'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
$server['s']['playersmax'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
$server['s']['name'] = lgsl_cut_pascal($buffer, 4);
|
||||
$server['e']['gamemode'] = lgsl_cut_pascal($buffer, 4);
|
||||
$server['s']['map'] = lgsl_cut_pascal($buffer, 4);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
elseif ($response_type == "r")
|
||||
{
|
||||
$lgsl_need['e'] = FALSE;
|
||||
|
||||
$item_total = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
|
||||
for ($i=0; $i<$item_total; $i++)
|
||||
{
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
$data_key = strtolower(lgsl_cut_pascal($buffer));
|
||||
$data_value = lgsl_cut_pascal($buffer);
|
||||
|
||||
$server['e'][$data_key] = $data_value;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
elseif ($response_type == "d")
|
||||
{
|
||||
$lgsl_need['p'] = FALSE;
|
||||
|
||||
$player_total = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
|
||||
for ($i=0; $i<$player_total; $i++)
|
||||
{
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
$server['p'][$i]['pid'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['p'][$i]['name'] = lgsl_cut_pascal($buffer);
|
||||
$server['p'][$i]['score'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "S");
|
||||
$server['p'][$i]['ping'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "S");
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
66
reference/savage.txt
Normal file
66
reference/savage.txt
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
function lgsl_query_17(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
// REFERENCE: http://masterserver.savage.s2games.com
|
||||
|
||||
fwrite($lgsl_fp, "\x9e\x4c\x23\x00\x00\xce\x21\x21\x21\x21");
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$buffer = substr($buffer, 12); // REMOVE HEADER
|
||||
|
||||
while ($key = strtolower(lgsl_cut_string($buffer, 0, "\xFE")))
|
||||
{
|
||||
if ($key == "players") { break; }
|
||||
|
||||
$value = lgsl_cut_string($buffer, 0, "\xFF");
|
||||
$value = str_replace("\x00", "", $value);
|
||||
$value = lgsl_parse_color($value, $server['b']['type']);
|
||||
|
||||
$server['e'][$key] = $value;
|
||||
}
|
||||
|
||||
$server['s']['name'] = $server['e']['name']; unset($server['e']['name']);
|
||||
$server['s']['map'] = $server['e']['world']; unset($server['e']['world']);
|
||||
$server['s']['players'] = $server['e']['cnum']; unset($server['e']['cnum']);
|
||||
$server['s']['playersmax'] = $server['e']['cmax']; unset($server['e']['cnum']);
|
||||
$server['s']['password'] = $server['e']['pass']; unset($server['e']['cnum']);
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$server['t'][0]['name'] = $server['e']['race1'];
|
||||
$server['t'][1]['name'] = $server['e']['race2'];
|
||||
$server['t'][2]['name'] = "spectator";
|
||||
|
||||
$team_key = -1;
|
||||
$player_key = 0;
|
||||
|
||||
while ($value = lgsl_cut_string($buffer, 0, "\x0a"))
|
||||
{
|
||||
if ($value[0] == "\x00") { break; }
|
||||
if ($value[0] != "\x20") { $team_key++; continue; }
|
||||
|
||||
$server['p'][$player_key]['name'] = lgsl_parse_color(substr($value, 1), $server['b']['type']);
|
||||
$server['p'][$player_key]['team'] = $server['t'][$team_key]['name'];
|
||||
|
||||
$player_key++;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
46
reference/savage2.txt
Normal file
46
reference/savage2.txt
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------+
|
||||
//------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
function lgsl_query_18(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
// REFERENCE: http://masterserver.savage2.s2games.com
|
||||
|
||||
fwrite($lgsl_fp, "\x01");
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$buffer = substr($buffer, 12); // REMOVE HEADER
|
||||
|
||||
$server['s']['name'] = lgsl_cut_string($buffer);
|
||||
$server['s']['players'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['playersmax'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['time'] = lgsl_cut_string($buffer);
|
||||
$server['s']['map'] = lgsl_cut_string($buffer);
|
||||
$server['e']['nextmap'] = lgsl_cut_string($buffer);
|
||||
$server['e']['location'] = lgsl_cut_string($buffer);
|
||||
$server['e']['minimum_players'] = ord(lgsl_cut_string($buffer));
|
||||
$server['e']['gamemode'] = lgsl_cut_string($buffer);
|
||||
$server['e']['version'] = lgsl_cut_string($buffer);
|
||||
$server['e']['minimum_level'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
|
||||
// DOES NOT RETURN PLAYER INFORMATION
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
54
reference/teeworlds.txt
Normal file
54
reference/teeworlds.txt
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
function lgsl_query_21(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
|
||||
fwrite($lgsl_fp,"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffgief");
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
$buffer = substr($buffer, 20); // REMOVE HEADER
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$server['s']['name'] = lgsl_cut_string($buffer);
|
||||
$server['s']['map'] = lgsl_cut_string($buffer);
|
||||
$server['e']['gamemode'] = lgsl_cut_string($buffer);
|
||||
$server['s']['password'] = lgsl_cut_string($buffer);
|
||||
$server['e']['progress'] = lgsl_cut_string($buffer)."%";
|
||||
$server['s']['players'] = lgsl_cut_string($buffer);
|
||||
$server['s']['playersmax'] = lgsl_cut_string($buffer);
|
||||
|
||||
switch ($server['e']['gamemode'])
|
||||
{
|
||||
case 0: $server['e']['gamemode'] = "Deathmatch"; break;
|
||||
case 1: $server['e']['gamemode'] = "Team Deathmatch"; break;
|
||||
case 2: $server['e']['gamemode'] = "Capture The Flag"; break;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$player_key = 0;
|
||||
|
||||
while ($buffer)
|
||||
{
|
||||
$server['p'][$player_key]['name'] = lgsl_cut_string($buffer);
|
||||
$server['p'][$player_key]['score'] = lgsl_cut_string($buffer);
|
||||
|
||||
$player_key ++;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
125
reference/tribes.txt
Normal file
125
reference/tribes.txt
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
function lgsl_query_23(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
// REFERENCE:
|
||||
// http://siteinthe.us
|
||||
// http://www.tribesmasterserver.com
|
||||
|
||||
fwrite($lgsl_fp, "b++");
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
$buffer = substr($buffer, 4); // REMOVE HEADER
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$server['s']['game'] = lgsl_cut_pascal($buffer);
|
||||
$server['e']['version'] = lgsl_cut_pascal($buffer);
|
||||
$server['s']['name'] = lgsl_cut_pascal($buffer);
|
||||
$server['e']['dedicated'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['password'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['players'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['playersmax'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['e']['cpu'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
$server['e']['mod'] = lgsl_cut_pascal($buffer);
|
||||
$server['e']['type'] = lgsl_cut_pascal($buffer);
|
||||
$server['s']['map'] = lgsl_cut_pascal($buffer);
|
||||
$server['e']['motd'] = lgsl_cut_pascal($buffer);
|
||||
$server['e']['teams'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$team_field = "?".lgsl_cut_pascal($buffer);
|
||||
$team_field = split("\t", $team_field);
|
||||
|
||||
foreach ($team_field as $key => $value)
|
||||
{
|
||||
$value = substr($value, 1);
|
||||
$value = strtolower($value);
|
||||
$team_field[$key] = $value;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$player_field = "?".lgsl_cut_pascal($buffer);
|
||||
$player_field = split("\t", $player_field);
|
||||
|
||||
foreach ($player_field as $key => $value)
|
||||
{
|
||||
$value = substr($value, 1);
|
||||
$value = strtolower($value);
|
||||
|
||||
if ($value == "player name") { $value = "name"; }
|
||||
|
||||
$player_field[$key] = $value;
|
||||
}
|
||||
|
||||
$player_field[] = "unknown_1";
|
||||
$player_field[] = "unknown_2";
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
for ($i=0; $i<$server['e']['teams']; $i++)
|
||||
{
|
||||
$team_name = lgsl_cut_pascal($buffer);
|
||||
$team_info = lgsl_cut_pascal($buffer);
|
||||
|
||||
if (!$team_info) { continue; }
|
||||
|
||||
$team_info = str_replace("%t", $team_name, $team_info);
|
||||
$team_info = split("\t", $team_info);
|
||||
|
||||
foreach ($team_info as $key => $value)
|
||||
{
|
||||
$field = $team_field[$key];
|
||||
$value = trim($value);
|
||||
|
||||
if ($field == "team name") { $field = "name"; }
|
||||
|
||||
$server['t'][$i][$field] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
for ($i=0; $i<$server['s']['players']; $i++)
|
||||
{
|
||||
$player_bits = array();
|
||||
$player_bits[] = ord(lgsl_cut_byte($buffer, 1)) * 4; // %p = PING
|
||||
$player_bits[] = ord(lgsl_cut_byte($buffer, 1)); // %l = PACKET LOSS
|
||||
$player_bits[] = ord(lgsl_cut_byte($buffer, 1)); // %t = TEAM
|
||||
$player_bits[] = lgsl_cut_pascal($buffer); // %n = PLAYER NAME
|
||||
$player_info = lgsl_cut_pascal($buffer);
|
||||
|
||||
if (!$player_info) { continue; }
|
||||
|
||||
$player_info = str_replace(array("%p","%l","%t","%n"), $player_bits, $player_info);
|
||||
$player_info = split("\t", $player_info);
|
||||
|
||||
foreach ($player_info as $key => $value)
|
||||
{
|
||||
$field = $player_field[$key];
|
||||
$value = trim($value);
|
||||
|
||||
if ($field == "team") { $value = $server['t'][$value]['name']; }
|
||||
|
||||
$server['p'][$i][$field] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
72
reference/tribes2.txt
Normal file
72
reference/tribes2.txt
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
function lgsl_query_25(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
// REFERENCE: http://www.tribesnext.com
|
||||
|
||||
fwrite($lgsl_fp,"\x12\x02\x21\x21\x21\x21");
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
$buffer = substr($buffer, 6); // REMOVE HEADER
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$server['s']['game'] = lgsl_cut_pascal($buffer);
|
||||
$server['e']['gamemode'] = lgsl_cut_pascal($buffer);
|
||||
$server['s']['map'] = lgsl_cut_pascal($buffer);
|
||||
$server['e']['bit_flags'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$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']['cpu'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
$server['e']['motd'] = lgsl_cut_pascal($buffer);
|
||||
$server['e']['unknown'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
|
||||
$server['e']['dedicated'] = ($server['e']['bit_flags'] & 1) ? "1" : "0";
|
||||
$server['s']['password'] = ($server['e']['bit_flags'] & 2) ? "1" : "0";
|
||||
$server['e']['os'] = ($server['e']['bit_flags'] & 4) ? "L" : "W";
|
||||
$server['e']['tournament'] = ($server['e']['bit_flags'] & 8) ? "1" : "0";
|
||||
$server['e']['no_alias'] = ($server['e']['bit_flags'] & 16) ? "1" : "0";
|
||||
|
||||
unset($server['e']['bit_flags']);
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$team_total = lgsl_cut_string($buffer, 0, "\x0A");
|
||||
|
||||
for ($i=0; $i<$team_total; $i++)
|
||||
{
|
||||
$server['t'][$i]['name'] = lgsl_cut_string($buffer, 0, "\x09");
|
||||
$server['t'][$i]['score'] = lgsl_cut_string($buffer, 0, "\x0A");
|
||||
}
|
||||
|
||||
$player_total = lgsl_cut_string($buffer, 0, "\x0A");
|
||||
|
||||
for ($i=0; $i<$player_total; $i++)
|
||||
{
|
||||
lgsl_cut_byte($buffer, 1); // ? 16
|
||||
lgsl_cut_byte($buffer, 1); // ? 8 or 14 = BOT / 12 = ALIAS / 11 = NORMAL
|
||||
if (ord($buffer[0]) < 32) { lgsl_cut_byte($buffer, 1); } // ? 8 PREFIXES SOME NAMES
|
||||
|
||||
$server['p'][$i]['name'] = lgsl_cut_string($buffer, 0, "\x11");
|
||||
lgsl_cut_string($buffer, 0, "\x09"); // ALWAYS BLANK
|
||||
$server['p'][$i]['team'] = lgsl_cut_string($buffer, 0, "\x09");
|
||||
$server['p'][$i]['score'] = lgsl_cut_string($buffer, 0, "\x0A");
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
90
reference/vcmp.txt
Normal file
90
reference/vcmp.txt
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
|
||||
/*----------------------------------------------------------------------------------------------------------\
|
||||
| |
|
||||
| [ LIVE GAME SERVER LIST ] [ © RICHARD PERRY FROM GREYCUBE.COM ] |
|
||||
| |
|
||||
| Released under the terms and conditions of the GNU General Public License Version 3 (http://gnu.org) |
|
||||
| |
|
||||
\-----------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
function lgsl_query_12(&$server, &$lgsl_need, &$lgsl_fp)
|
||||
{
|
||||
//---------------------------------------------------------+
|
||||
// REFERENCE:
|
||||
// VICE CITY CURRENTLY ONLY SUPPORTS THE 'i' CHALLENGE
|
||||
|
||||
if ($server['b']['type'] == "samp") { $challenge_packet = "SAMP\x21\x21\x21\x21\x00\x00"; }
|
||||
elseif ($server['b']['type'] == "vcmp") { $challenge_packet = "VCMP\x21\x21\x21\x21\x00\x00"; $lgsl_need['e'] = FALSE; $lgsl_need['p'] = FALSE; }
|
||||
|
||||
if ($lgsl_need['s']) { $challenge_packet .= "i"; }
|
||||
elseif ($lgsl_need['e']) { $challenge_packet .= "r"; }
|
||||
elseif ($lgsl_need['p']) { $challenge_packet .= "d"; }
|
||||
|
||||
fwrite($lgsl_fp, $challenge_packet);
|
||||
|
||||
$buffer = fread($lgsl_fp, 4096);
|
||||
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
$buffer = substr($buffer, 10); // REMOVE HEADER
|
||||
|
||||
$response_type = lgsl_cut_byte($buffer, 1);
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
if ($response_type == "i")
|
||||
{
|
||||
$lgsl_need['s'] = FALSE;
|
||||
|
||||
$server['s']['password'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['s']['players'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
$server['s']['playersmax'] = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
$server['s']['name'] = lgsl_cut_pascal($buffer, 4);
|
||||
$server['e']['gamemode'] = lgsl_cut_pascal($buffer, 4);
|
||||
$server['s']['map'] = lgsl_cut_pascal($buffer, 4);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
elseif ($response_type == "r")
|
||||
{
|
||||
$lgsl_need['e'] = FALSE;
|
||||
|
||||
$item_total = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
|
||||
for ($i=0; $i<$item_total; $i++)
|
||||
{
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
$data_key = strtolower(lgsl_cut_pascal($buffer));
|
||||
$data_value = lgsl_cut_pascal($buffer);
|
||||
|
||||
$server['e'][$data_key] = $data_value;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
elseif ($response_type == "d")
|
||||
{
|
||||
$lgsl_need['p'] = FALSE;
|
||||
|
||||
$player_total = lgsl_unpack(lgsl_cut_byte($buffer, 2), "S");
|
||||
|
||||
for ($i=0; $i<$player_total; $i++)
|
||||
{
|
||||
if (!$buffer) { return FALSE; }
|
||||
|
||||
$server['p'][$i]['pid'] = ord(lgsl_cut_byte($buffer, 1));
|
||||
$server['p'][$i]['name'] = lgsl_cut_pascal($buffer);
|
||||
$server['p'][$i]['score'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "S");
|
||||
$server['p'][$i]['ping'] = lgsl_unpack(lgsl_cut_byte($buffer, 4), "S");
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------+
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue