<?php
//////////////////////////////////////////XOOOPS ADMIN HEADER INFORMATION////////////////////////////////////////
include_once '../../../mainfile.php';
global $xoopsDB;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//-----------------------------------LIST CREATION-----------------------------+
global $xoopsDB;
$filename = XOOPS_ROOT_PATH."/modules/bf2query/lgsl/cachedips/lgsl_servers.txt";
$iplist = @fopen($filename, "w+");
@fclose($iplist);
$server_sql = "SELECT * FROM ".$xoopsDB->prefix("bf2query_s_name")." LIMIT 0, 500";// These are pre-defined server IPS that were gathered by KQUERY.
$query_servers = $xoopsDB->query($server_sql) or die("I cannot connect to the database to find the playername!");
while ($row_servers = $xoopsDB->fetchArray($query_servers)){
$server = $row_servers['s_ip'];
$port = $row_servers['s_port'];
$sid = $row_servers['s_name_id'];
//echo "$sid - $server:$port<br>";
$filename = XOOPS_ROOT_PATH."/modules/bf2query/lgsl/cachedips/lgsl_servers.txt";
$iplist = @fopen($filename, "a+");
$ipaddress = $row_servers['s_ip'];
$ipstring = "$ipaddress:16567:bf2 n";
@fwrite($iplist, "$ipstring");
@fclose($iplist);
///////////////////////////////////////////////////////////////END SERVER LIST CREATION //////////////////////////////////
}
//------------------------------------------------------------SERVER PARSE FUNCTION--------------------------------------------------++
/*_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_| |_/
_| LIVE GAME SERVER LIST [ STAND ALONE ] |_/
_| |_/
_| © Richard Perry from http://www.greycube.com |_/
_| |_/
_| Released under the terms and conditions of the |_/
_| GNU General Public License (http://gnu.org). |_/
_| |_/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_*/
//-----------------------------------------------------------------------------------------------------------+
$lgsl_cachetime = 10; // REFRESH DELAY IN MINS - AS GUIDE ADD 1 AFTER EVERY 30 SERVERS ON THE LIST
$lgsl_hostnamelength = 50; // FULL SERVER LIST - NUMBER OF CHARACTERS BEFORE SERVER NAME GETS CHOPPED
$lgsl_hostname_to_ip = 0; // CONVERT HOSTNAMES TO IP ADDRESS TO SAVE SPACE AND FOR ASE LINK TO WORK
//-----------------------------------------------------------------------------------------------------------+
include_once XOOPS_ROOT_PATH.'/modules/bf2query/lgsl/lgsl_protocol.php';
if (!is_writable(XOOPS_ROOT_PATH.'/modules/bf2query/lgsl/cachedips/lgsl_cache.dat')) { echo "THE FILE LGSL_CACHE.DAT IS NOT WRITABLE"; exit; }
//-----------------------------------------------------------------------------------------------------------+
$lines = file(XOOPS_ROOT_PATH.'/modules/bf2query/lgsl/cachedips/lgsl_cache.dat');
$last_line = count($lines) - 1;
$last_update = intval($lines[$last_line]);
$time_check = time() - ($lgsl_cachetime * 60);
if ($time_check < $last_update)
{
// echo "DEBUG: This information was CACHED <br /><br />";
unset($lines[$last_line]);
foreach ($lines as $line_number=>$line)
{
$data_cache[$line_number] = unserialize($line);
}
}
else
{
//-----------------------------------------------------------------------------------------------------------+
// echo "DEBUG: This information was LIVE <br /><br />";
ignore_user_abort(true); // FINISH WRITING CACHE EVEN IF THE BROWSER IS CLOSED
$lines = file(XOOPS_ROOT_PATH.'/modules/bf2query/lgsl/cachedips/lgsl_servers.txt');
foreach ($lines as $line)
{
if (!trim($line)) { continue; } // SKIP BLANK LINES
$part = explode(":", $line);
$server_ip = trim($part[0]); // TRIM REMOVES
$server_port = trim($part[1]); // ACCIDENTAL SPACES
$server_type = trim($part[2]); // AND NEWLINE CHARACTERS
$data = lgsl_query($server_ip, $server_port, $server_type, "info");
$data[mapname] = preg_replace("/[^A-Za-z0-9 _-]/", "_", strtolower($data[mapname])); // CONVERT FOR FILE
$data[gamemod] = preg_replace("/[^A-Za-z0-9 _-]/", "_", strtolower($data[gamemod])); // AND FOLDER USAGE
$data_counter += 1;
$data_cache[$data_counter] = $data;
}
$fh = fopen(XOOPS_ROOT_PATH.'/modules/bf2query/lgsl/cachedips/lgsl_cache.dat',"w");
foreach($data_cache as $line)
{
$line = serialize($line)."rn";
fwrite($fh,$line);
}
fwrite($fh, time());
fclose($fh);
ignore_user_abort(false);
}
//-----------------------------------------------------------------------------------------------------------+
?>
<?
foreach($data_cache as $data)
{
if (!$data[status])
{
$lgsl_image_status = "images/status/server_offline.gif";
$data[status] = "OFFLINE";
$data[hostname] = "Unknown";
$data[mapname] = "unknown";
$data[players] = "0";
$data[maxplayers] = "0";
}
else if (!$data[password])
{
$lgsl_image_status = "images/status/server_online.gif";
$data[status] = "ONLINE";
}
else
{
$lgsl_image_status = "images/status/server_online_password.gif";
$data[status] = "ONLINE WITH PASSWORD";
}
//-----------------------------------------------------------------------------------------------------------+
$lgsl_image_icon = "images/icons/$data[gametype]/$data[gamemod].gif"; // USE MOD ICON
if (!file_exists($lgsl_image_icon))
{
$lgsl_image_icon = "images/icons/$data[gametype]/$data[gametype].gif"; // USE GAME ICON
if (!file_exists($lgsl_image_icon))
{
$lgsl_image_icon = "images/status/unknown.gif"; // USE UKNOWN ICON
}
}
//-----------------------------------------------------------------------------------------------------------+
if (strlen($data[hostname]) > $lgsl_hostnamelength)
{
$data[hostname] = substr($data[hostname], 0, $lgsl_hostnamelength - 3) . "..."; // SHORTEN HOSTNAME
}
$data[hostname] = htmlentities($data[hostname], ENT_QUOTES); // CHANGE SYMBOLS INTO ENTITIES
//-----------------------------------------------------------------------------------------------------------+
if ($lgsl_hostname_to_ip) { $data[ip] = gethostbyname($data[ip]); } // CONVERT HOSTNAME TO IP
$lgsl_launch = lgsl_get("launch", $data[ip], $data[port], $data[gametype]); // GET SOFTWARE LAUNCH LINK
//-----------------------------------------------------------------------------------------------------------+
$lgsl_stats_servers++; // COUNT VISIBLE NUMBER OF SERVERS
$lgsl_stats_players += $data[players]; // COUNT VISIBLE NUMBER OF PLAYERS
$lgsl_stats_maxplayers += $data[maxplayers]; // COUNT VISIBLE NUMBER OF SLOTS
//-----------------------------------------------------------------------------------------------------------+
//-----------------------------------------------------------------------------------------------------------+
//-----------------------------------------INSERT PLAYER INFORMATION INTO THE DATABASE-----------------------+
//require_once("lgsl_protocol.php");
//$data = lgsl_query($server_ip, $server_port, $server_type, "players");
$_GET[ip] = $data[ip];
$_GET[port] = $data[port];
$get_ip = $_GET[ip];
$get_port = $_GET[port];
//-----------------------------------------------------------------------------------------------------------+
unset($get_type);
$lines = file(XOOPS_ROOT_PATH.'/modules/bf2query/lgsl/cachedips/lgsl_servers.txt');
foreach ($lines as $line)
{
if (!trim($line)) { continue; } // SKIP BLANK LINES
$part = explode(":", $line);
$server_ip = trim($part[0]); // TRIM REMOVES
$server_port = trim($part[1]); // ACCIDENTAL SPACES
$server_type = trim($part[2]); // AND NEWLINE CHARACTERS
if ($server_ip == $get_ip && $server_port == $get_port)
{
$get_type = $server_type; // GETS THE SERVER TYPE FROM THE LGSL_SERVERS.TXT
}
}
if (!$get_type) { exit; } // PROTECT AGAINST THE LINK BEING ALTERED
//-----------------------------------------------------------------------------------------------------------+
$player_list = lgsl_query($get_ip, $get_port, $get_type, "players");
//if (!$player_list) { echo "<div style='text-align:center'>No Players or Server Not Responding</div></body></html>"; }
//-----------------------------------------------------------------------------------------------------------+
if (isset($player_list[1][score]) ) { $lgsl_showscore = 1; }
if (isset($player_list[1][deaths])) { $lgsl_showdeaths = 1; }
if (isset($player_list[1][skill])) { $lgsl_showskill = 1; }
if (isset($player_list[1][goal])) { $lgsl_showgoal = 1; }
if (isset($player_list[1][honor])) { $lgsl_showhonor = 1; }
if (isset($player_list[1][leader])) { $lgsl_showleader = 1; }
if (isset($player_list[1][ping]) ) { $lgsl_showping = 1; }
if (isset($player_list[1][team]) ) { $lgsl_showteam = 1; }
if (isset($player_list[1][stats]) ) { $lgsl_showstats = 1; }
if (isset($player_list[1][time]) ) { $lgsl_showtime = 1; }
if (isset($player_list[1][skin])) { $lgsl_showskin = 1; }
//if (isset($player_list[1][keyhash])) { $lgsl_showhash = 1; }
//if (isset($player_list[1][pid])) { $lgsl_showpid = 1; }
// --------------------------------------------------------+
// --------------------------------------------------------+
foreach ($player_list as $key=>$player)
{
$player[name] = htmlentities($player[name], ENT_QUOTES); // CONVERT SYMBOLS
$time=time();
$time = $time+1;
$playername = $player[name]; //<== VARIABLE FROM SERVER QUERY, LISTS EACH PLAYER IN AN ARRAY.
$hostname = $data[hostname];
$playerscore = $player[score];
$playerdeaths = $player[deaths];
$playerskill = $player[skill];
$playergoal = $player[goal];
$playerhonor = $player[honor];
$playerleader = $player[leader];
$playerping = $player[ping];
$playerteam = $player[team];
$playerstats = $player[stats];
$playertime = $player[time];
$playerskin = $player[skin];
$playerhash = $player[hash];
$playerpid = $player[pid];
$gameserver_ip = $data[ip];
$gameserver_mapname = $data[mapname];
$q = "SELECT * FROM ".$xoopsDB->prefix("bf2query_s_name")." WHERE s_ip='$gameserver_ip'";
$query_servers = $xoopsDB->query($q) or die("I cannot connect to the database!");
$server = $xoopsDB->fetchArray($query_servers);
$s_port = $server['s_port'];
$gameserver_port = $s_port;
/*
$qps = "SELECT * FROM ".$xoopsDB->prefix("bf2query_g_pstats")." WHERE s_p_name='$playername'";
$query_playerstats = $xoopsDB->query($qps) or die("I cannot connect to the database to find the playername!");
$playerstats = $xoopsDB->fetchArray($query_playerstats);
$s_p_id = $playerstats['s_p_id'];
$s_p_pid = $playerstats['s_p_pid'];
$s_p_name = $playerstats['s_p_name'];
$s_p_score = (($playerstats['s_p_score'])+($playerscore));
$s_p_kill = (($playerstats['s_p_kill'])+($playerskill));
$s_p_deaths = (($playerstats['s_p_deaths'])+($playerdeaths));
$s_p_ping = ((($playerstats['s_p_ping'])+($playerping))/2);
$s_p_sname = $playerstats['s_p_sname'];
$s_s_ip = $playerstats['s_s_ip'];
$s_s_port = $playerstats['s_s_port'];
$s_p_map = $playerstats['s_p_map'];
if (mysql_num_rows($query_playerstats)==0) {
@mysql_query("INSERT INTO ".$xoopsDB->prefix("bf2query_g_pstats")." SET s_p_id='$s_p_id', s_p_pid='$playerpid', s_p_name='$playername', s_p_score='$s_p_score', s_p_deaths='$s_p_deaths', s_p_ping='$s_p_ping', s_p_map='$gameserver_mapname', s_p_kill='$playerskill'") or die("Help I cant INSERT the player information");
}else{
@mysql_query("UPDATE ".$xoopsDB->prefix("bf2query_g_pstats")." SET s_p_id='$s_p_id', s_p_pid='$playerpid', s_p_name='$playername', s_p_score='$s_p_score', s_p_deaths='$s_p_deaths', s_p_ping='$s_p_ping', s_p_map='$s_p_map', s_p_kill='$s_p_kill' WHERE s_p_name='$playername'") or die("Help I cant UPDATE the player information");
}
*/
//$result = $xoopsDB->query($r) or die("");
$qp = "SELECT * FROM ".$xoopsDB->prefix("bf2query_info")." WHERE pname='$playername'";
$query_players = $xoopsDB->query($qp) or die("I cannot connect to the database to find the playername!");
$p_score = (($query_players['p_score'])+($playerscore));
$p_kill = (($query_players['p_skill'])+($playerskill));
$p_deaths = (($query_players['p_deaths'])+($playerdeaths));
$p_ping = ((($query_players['p_ping'])+($playerping))/2);
if (mysql_num_rows($query_players)==0) {
//@mysql_query("INSERT INTO ".$xoopsDB->prefix("bf2query_player_info")." SET s_time='$time', p_s_ip='$gameserver_ip', pname='$playername', p_s_name='$hostname', p_s_port='$gameserver_port', p_score='$playerscore', p_deaths='$playerdeaths', p_skill='$playerskill', p_goal='$playergoal', p_honor='$playerhonor', p_leader='$playerleader', p_ping='$playerping', p_team='$playerteam', p_stats='$playerstats', p_skin='$playerskin', p_hash='$playerhash', p_pid='$playerpid', p_s_time='$time'") or die("Help Im broke");
//$xoopsDB->query($insert_players) or die("I cannot insert this data!");
@mysql_query("INSERT INTO ".$xoopsDB->prefix("bf2query_info")." SET s_time='$time', p_s_ip='$gameserver_ip', pname='$playername', p_s_name='$hostname', p_s_port='$gameserver_port', p_score='$playerscore', p_deaths='$playerdeaths', p_ping='$playerping', p_team='$playerteam', p_skill='$playerskill', p_pid='$playerpid', p_s_map='$gameserver_mapname'") or die("Help I cant insert the player information");
//echo "$player[name]<br> inserted";//USE THIS TO TEST FOR ERRORS
/*
//MAIL FUNCTION ++-----------------------------------USE THIS WISELY, BECAUSE IT SENDS AN EMAIL OUT FOR EVERY PLAYER INSERTED.
$msg = "BF2QUERY PLAYER INSERTED n";
$sender_name = "BF2QUERY";
$sender_email = "noreply@bf2online.com";
$msg .= "Sender's Name:t$sender_namen";
$msg .= "Senders' Email:t$sender_emailn";
$message = "The Player $playername has been inserted into the database. They are currently playing on $hostname.";
$msg .= "Message:t$messagenn";
$to = "widowmaker@bf2online.com";
$subject = "BF2QUERY PLAYER INSERTED";
$mailheaders = "From: BF2Online BF2QUERY <> n";
$mailheaders .= "Reply-To: $sender_emailnn";
mail($to, $subject, $msg, $mailheaders);
//END MAIL FUNCTION
*/
}else{
@mysql_query("UPDATE ".$xoopsDB->prefix("bf2query_info")." SET s_time='$time', p_s_ip='$gameserver_ip', pname='$playername', p_s_name='$hostname', p_s_port='$gameserver_port', p_score='$p_score', p_deaths='$p_deaths', p_ping='$p_ping', p_team='$playerteam', p_skill='$p_kill', p_pid='$playerpid', p_s_map='$gameserver_mapname' WHERE pname='$playername'") or die("Help I cant update the player info, something is very wrong!!");
//echo "$player[name]<br> updated";//USE THIS TO TEST FOR ERRORS
/*
//MAIL FUNCTION ++-----------------------------------USE THIS WISELY, BECAUSE IT SENDS AN EMAIL OUT FOR EVERY PLAYER UPDATED.
$msg = "BF2QUERY PLAYER UPDATE n";
$sender_name = "BF2QUERY";
$sender_email = "noreply@bf2online.com";
$msg .= "Sender's Name:t$sender_namen";
$msg .= "Senders' Email:t$sender_emailn";
$message = "The Player $playername has been updated. They are currently playing on $hostname.";
$msg .= "Message:t$messagenn";
$to = "widowmaker@bf2online.com";
$subject = "BF2QUERY PLAYER UPDATE";
$mailheaders = "From: BF2Online BF2QUERY <> n";
$mailheaders .= "Reply-To: $sender_emailnn";
mail($to, $subject, $msg, $mailheaders);
//END MAIL FUNCTION
*/
}
}
}
//MAIL FUNCTION ++-----------------------------------.
$msg = "BF2QUERY PARSE SCRIPT STATUS n";
$sender_name = "BF2QUERY";
$sender_email = "noreply@bf2online.com";
$msg .= "Sender's Name:t$sender_namen";
$msg .= "Senders' Email:t$sender_emailn";
$message = "The first 500 servers have been successfully parsed. Please check the module for updated or inserted players.";
$msg .= "Message:t$messagenn";
$to = "widowmaker@bf2online.com";
$subject = "BF2QUERY SCRIPT STATUS";
$mailheaders = "From: BF2Online BF2QUERY <> n";
$mailheaders .= "Reply-To: $sender_emailnn";
mail($to, $subject, $msg, $mailheaders);
//END MAIL FUNCTION
echo "Script finished";//
?>
This is the script that parses the servers and inserts the players, if there are any, into the database.