diff --git a/.gitattributes b/.gitattributes index 4e8e8de0..e09b704f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -38,3 +38,4 @@ robots.txt eol=lf .gitignore export-ignore .gitattributes export-ignore .gitmodules export-ignore +README.md export-ignore diff --git a/README.md b/README.md new file mode 100644 index 00000000..9f43ee6a --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +**This is the game engine source code repository.** + +MegaGlest (http://megaglest.org) is a libre software cross +platform real-time strategy game. + +[![logo](http://megaglest.org/uploads/megaglest2011/logo/logo.png)] +(http://megaglest.org/) + +MegaGlest is an entertaining free (freeware and free software) +and open source cross-platform 3D real-time strategy (RTS) game, +where you control the armies of one of seven different factions: +Tech, Magic, Egypt, Indians, Norsemen, Persian or Romans. The +game is setup in one of 17 naturally looking settings, which +-like the unit models- are crafted with great appreciation for +detail. A lot of additional game data can be downloaded from +within the game at no cost. + +[**MegaGlest Downloads**](http://megaglest.org/download.html) + +[![gif](http://megaglest.org/uploads/images/screenshots/game_screens.gif)] +(http://megaglest.org/screenshots.html) +[![intro](http://megaglest.org/uploads/images/trailer3.png)] +(http://downloads.megaglest.org/videos/megaglest_game_trailer_lq.webm) + +If you want compile MegaGlest yourself then you should read the +[**tutorial**](https://docs.megaglest.org/MG/Development) or +[tutorial2](https://github.com/MegaGlest/megaglest-source/wiki/Git-How-To) + + +go to the [Main Repository](https://github.com/MegaGlest/megaglest-source) +( e.g. from the fork ... ) diff --git a/README.txt b/README.txt deleted file mode 100644 index 052b15ca..00000000 --- a/README.txt +++ /dev/null @@ -1 +0,0 @@ -Please refer to docs/ for all documentation, license and copyright information. diff --git a/data/glest_game b/data/glest_game index cfb41238..7de4b4b6 160000 --- a/data/glest_game +++ b/data/glest_game @@ -1 +1 @@ -Subproject commit cfb41238ad446318b6dda34adba700194a5037c6 +Subproject commit 7de4b4b6d02ae1933e3964cc02d31aa288d49463 diff --git a/mk/linux/.gitignore b/mk/linux/.gitignore index 518ecbeb..5fa5b59b 100644 --- a/mk/linux/.gitignore +++ b/mk/linux/.gitignore @@ -1,8 +1,8 @@ -megaglest -megaglest.6 +/megaglest +/megaglest.6 -megaglest_* -!*.desktop +/megaglest_* +!/*.desktop core core.bak diff --git a/source/.gitignore b/source/.gitignore index dace2a5b..0f1f98e9 100644 --- a/source/.gitignore +++ b/source/.gitignore @@ -1,2 +1 @@ /windows_deps*/ -/glest_game/facilities/gitversion.h diff --git a/source/glest_game/facilities/.gitignore b/source/glest_game/facilities/.gitignore new file mode 100644 index 00000000..7735ddf7 --- /dev/null +++ b/source/glest_game/facilities/.gitignore @@ -0,0 +1 @@ +/gitversion.h diff --git a/source/masterserver/README.txt b/source/masterserver/README.txt deleted file mode 100644 index ffb16c82..00000000 --- a/source/masterserver/README.txt +++ /dev/null @@ -1 +0,0 @@ -Please refer to the files in the docs/ subdirectory. diff --git a/source/masterserver/addGameStats.php b/source/masterserver/addGameStats.php deleted file mode 100644 index 3ad6a4a4..00000000 --- a/source/masterserver/addGameStats.php +++ /dev/null @@ -1,274 +0,0 @@ - 0 ) - { - mysql_query( 'DELETE FROM glestserver WHERE ' . $whereClause . ';'); - mysql_query( 'DELETE FROM glestgamestats WHERE ' . $whereClause . ';'); - mysql_query( 'DELETE FROM glestgameplayerstats WHERE ' . $whereClause . ';'); - - echo 'OK - ' . $gameDuration; - return; - } - } - - $stats_in_db = @mysql_query( 'SELECT COUNT(*) FROM glestgamestats WHERE ' . $whereClause . ';' ); - $statsCount = @mysql_fetch_row( $stats_in_db ); - $player_stats_in_db = @mysql_query( 'SELECT COUNT(*) FROM glestgameplayerstats WHERE ' . $whereClause . ';'); - $player_statsCount = @mysql_fetch_row( $player_stats_in_db ); - - - $gameUUID = (string) clean_str( $_GET['gameUUID'] ); - $tech = (string) clean_str( $_GET['tech'] ); - $factionCount = 0; - if ( isset( $_GET['factionCount'] ) ) { - $factionCount = (string) clean_str( $_GET['factionCount'] ); - } - $framesPlayed = 0; - if ( isset( $_GET['framesPlayed'] ) ) { - $framesPlayed = (string) clean_str( $_GET['framesPlayed'] ); - } - $maxConcurrentUnitCount = 0; - if ( isset( $_GET['maxConcurrentUnitCount'] ) ) { - $maxConcurrentUnitCount = (string) clean_str( $_GET['maxConcurrentUnitCount'] ); - } - $totalEndGameConcurrentUnitCount = 0; - if ( isset( $_GET['totalEndGameConcurrentUnitCount'] ) ) { - $totalEndGameConcurrentUnitCount = (string) clean_str( $_GET['totalEndGameConcurrentUnitCount'] ); - } - $isHeadlessServer = 0; - if ( isset( $_GET['isHeadlessServer'] ) ) { - $isHeadlessServer = (string) clean_str( $_GET['isHeadlessServer'] ); - } - - //echo '#1 ' . $whereClause; - //echo '#2 ' . $statsCount[0]; - - if ( $statsCount[0] > 0 ) // this game is contained in the database - { - // update database info on this game server; no checks are performed - $result = mysql_query( 'UPDATE glestgamestats SET ' . - 'gameUUID=\'' . mysql_real_escape_string( $gameUUID ) . '\', ' . - 'tech=\'' . mysql_real_escape_string( $tech ) . '\', ' . - 'factionCount=\'' . mysql_real_escape_string( $factionCount ) . '\', ' . - 'framesPlayed=\'' . mysql_real_escape_string( $framesPlayed ) . '\', ' . - 'framesToCalculatePlaytime=\'' . mysql_real_escape_string( $framesToCalculatePlaytime ) . '\', ' . - 'maxConcurrentUnitCount=\'' . mysql_real_escape_string( $maxConcurrentUnitCount ) . '\', ' . - 'totalEndGameConcurrentUnitCount=\'' . mysql_real_escape_string( $totalEndGameConcurrentUnitCount ) . '\', ' . - 'isHeadlessServer=\'' . mysql_real_escape_string( $isHeadlessServer ) . '\', ' . - 'lasttime=' . 'now()' . ' ' . - 'WHERE ' . $whereClause . ';'); - - if (!$result) { - die('part 1a: Invalid query: ' . mysql_error()); - } - - echo 'OK1a'; - } - else // this game server is not listed in the database, yet - { // check whether this game server is available from the Internet; if it is, add it to the database - // update database info on this game server; no checks are performed - $result = mysql_query( 'INSERT INTO glestgamestats SET ' . - 'gameUUID=\'' . mysql_real_escape_string( $gameUUID ) . '\', ' . - 'tech=\'' . mysql_real_escape_string( $tech ) . '\', ' . - 'factionCount=\'' . mysql_real_escape_string( $factionCount ) . '\', ' . - 'framesPlayed=\'' . mysql_real_escape_string( $framesPlayed ) . '\', ' . - 'framesToCalculatePlaytime=\'' . mysql_real_escape_string( $framesToCalculatePlaytime ) . '\', ' . - 'maxConcurrentUnitCount=\'' . mysql_real_escape_string( $maxConcurrentUnitCount ) . '\', ' . - 'totalEndGameConcurrentUnitCount=\'' . mysql_real_escape_string( $totalEndGameConcurrentUnitCount ) . '\', ' . - 'isHeadlessServer=\'' . mysql_real_escape_string( $isHeadlessServer ) . '\';'); - - if (!$result) { - die('part 2a: Invalid query: ' . mysql_error()); - } - - echo 'OK2b'; - } - - for ( $factionNumber = 0; $factionNumber < $factionCount ; $factionNumber++) - { - // Player details - $factionIndex = 0; - if ( isset( $_GET['factionIndex_' . $factionNumber ] ) ) { - $factionIndex = clean_str( $_GET['factionIndex_' . $factionNumber] ); - } - - $controlType = 0; - if ( isset( $_GET['controlType_' . $factionNumber] ) ) { - $controlType = clean_str( $_GET['controlType_' . $factionNumber] ); - } - - $resourceMultiplier = 0; - if ( isset( $_GET['resourceMultiplier_' . $factionNumber] ) ) { - $resourceMultiplier = clean_str( $_GET['resourceMultiplier_' . $factionNumber] ); - } - - $factionTypeName = ""; - if ( isset( $_GET['factionTypeName_' . $factionNumber] ) ) { - $factionTypeName = (string) clean_str( $_GET['factionTypeName_' . $factionNumber] ); - } - - $personalityType = 0; - if ( isset( $_GET['personalityType_' . $factionNumber] ) ) { - $personalityType = clean_str( $_GET['personalityType_' . $factionNumber] ); - } - - $teamIndex = 0; - if ( isset( $_GET['teamIndex_' . $factionNumber] ) ) { - $teamIndex = clean_str( $_GET['teamIndex_' . $factionNumber] ); - } - - $wonGame = 0; - if ( isset( $_GET['wonGame_' . $factionNumber] ) ) { - $wonGame = clean_str( $_GET['wonGame_' . $factionNumber] ); - } - - $killCount = 0; - if ( isset( $_GET['killCount_' . $factionNumber] ) ) { - $killCount = clean_str( $_GET['killCount_' . $factionNumber] ); - } - - $enemyKillCount = 0; - if ( isset( $_GET['enemyKillCount_' . $factionNumber] ) ) { - $enemyKillCount = clean_str( $_GET['enemyKillCount_' . $factionNumber] ); - } - - $deathCount = 0; - if ( isset( $_GET['deathCount_' . $factionNumber] ) ) { - $deathCount = clean_str( $_GET['deathCount_' . $factionNumber] ); - } - - $unitsProducedCount = 0; - if ( isset( $_GET['unitsProducedCount_' . $factionNumber] ) ) { - $unitsProducedCount = clean_str( $_GET['unitsProducedCount_' . $factionNumber] ); - } - - $resourceHarvestedCount = 0; - if ( isset( $_GET['resourceHarvestedCount_' . $factionNumber] ) ) { - $resourceHarvestedCount = clean_str( $_GET['resourceHarvestedCount_' . $factionNumber] ); - } - - $playerName = ""; - if ( isset( $_GET['playerName_' . $factionNumber] ) ) { - $playerName = (string) clean_str( $_GET['playerName_' . $factionNumber] ); - } - - $quitBeforeGameEnd = 0; - if ( isset( $_GET['quitBeforeGameEnd_' . $factionNumber] ) ) { - $quitBeforeGameEnd = clean_str( $_GET['quitBeforeGameEnd_' . $factionNumber] ); - } - - $quitTime = 0; - if ( isset( $_GET['quitTime_' . $factionNumber] ) ) { - $quitTime = clean_str( $_GET['quitTime_' . $factionNumber] ); - } - - $playerUUID = ""; - if ( isset( $_GET['playerUUID_' . $factionNumber] ) ) { - $playerUUID = (string) clean_str( $_GET['playerUUID_' . $factionNumber] ); - } - - $playerPlatform = ""; - if ( isset( $_GET['platform_' . $factionNumber] ) ) { - $playerPlatform = (string) clean_str( $_GET['platform_' . $factionNumber] ); - } - - if($player_statsCount[0] > 0) - { - $result = mysql_query( 'UPDATE glestgameplayerstats SET ' . - 'gameUUID=\'' . mysql_real_escape_string( $gameUUID ) . '\', ' . - 'factionIndex=' . $factionIndex . ', ' . - 'controlType=' . $controlType . ', ' . - 'resourceMultiplier=' . $resourceMultiplier . ', ' . - 'factionTypeName=\'' . mysql_real_escape_string( $factionTypeName ) . '\', ' . - 'personalityType=' . $personalityType . ', ' . - 'teamIndex=' . $teamIndex . ', ' . - 'wonGame=' . $wonGame . ', ' . - 'killCount=' . $killCount . ', ' . - 'enemyKillCount=' . $enemyKillCount . ', ' . - 'deathCount=' . $deathCount . ', ' . - 'unitsProducedCount=' . $unitsProducedCount . ', ' . - 'resourceHarvestedCount=' . $resourceHarvestedCount . ', ' . - 'playerName=\'' . mysql_real_escape_string( $playerName ) . '\', ' . - 'quitBeforeGameEnd=' . $quitBeforeGameEnd . ', ' . - 'quitTime=' . $quitTime . ', ' . - 'playerUUID=\'' . mysql_real_escape_string( $playerUUID ) . '\', ' . - 'platform=\'' . mysql_real_escape_string( $playerPlatform ) . '\', ' . - 'lasttime=' . 'now()' . ' ' . - 'WHERE ' . $whereClause . ' AND factionIndex = ' . $factionIndex . ';'); - - if (!$result) { - die('part 1b: Invalid query: ' . mysql_error()); - } - - //echo 'OK1 $factionNumber = ' . $factionNumber; - echo 'OK1b' . $factionNumber; - } - else - { - $result = mysql_query( 'INSERT INTO glestgameplayerstats SET ' . - 'gameUUID=\'' . mysql_real_escape_string( $gameUUID ) . '\', ' . - 'factionIndex=' . $factionIndex . ', ' . - 'controlType=' . $controlType . ', ' . - 'resourceMultiplier=' . $resourceMultiplier . ', ' . - 'factionTypeName=\'' . mysql_real_escape_string( $factionTypeName ) . '\', ' . - 'personalityType=' . $personalityType . ', ' . - 'teamIndex=' . $teamIndex . ', ' . - 'wonGame=' . $wonGame . ', ' . - 'killCount=' . $killCount . ', ' . - 'enemyKillCount=' . $enemyKillCount . ', ' . - 'deathCount=' . $deathCount . ', ' . - 'unitsProducedCount=' . $unitsProducedCount . ', ' . - 'resourceHarvestedCount=' . $resourceHarvestedCount . ', ' . - 'playerName=\'' . mysql_real_escape_string( $playerName ) . '\', ' . - 'quitBeforeGameEnd=' . $quitBeforeGameEnd . ', ' . - 'quitTime=' . $quitTime . ', ' . - 'platform=\'' . mysql_real_escape_string( $playerPlatform ) . '\', ' . - 'playerUUID=\'' . mysql_real_escape_string( $playerUUID ) . '\';'); - - if (!$result) { - die('part 2b: Invalid query: ' . mysql_error()); - } - - //echo 'OK2 $factionNumber = ' . $factionNumber; - echo 'OK2b' . $factionNumber; - } - } - - db_disconnect( DB_LINK ); - } -?> diff --git a/source/masterserver/addServerInfo.php b/source/masterserver/addServerInfo.php deleted file mode 100644 index d49544ad..00000000 --- a/source/masterserver/addServerInfo.php +++ /dev/null @@ -1,310 +0,0 @@ - \'' . - mysql_real_escape_string( $gameUUID ) . '\' AND status in (0,1,2);' ); - } - - if ( ($remote_ip == $game_host_ip && $service_port == $game_host_port) || $status == 2 ) // this server is contained in the database - { - if ( $remote_ip == $game_host_ip && $service_port == $game_host_port) - { - // update database info on this game server; no checks are performed - mysql_query( 'UPDATE glestserver SET ' . - 'glestVersion=\'' . mysql_real_escape_string( $glestVersion ) . '\', ' . - 'platform=\'' . mysql_real_escape_string( $platform ) . '\', ' . - 'binaryCompileDate=\'' . mysql_real_escape_string( $binaryCompileDate ) . '\', ' . - 'serverTitle=\'' . mysql_real_escape_string( $serverTitle ) . '\', ' . - 'tech=\'' . mysql_real_escape_string( $tech ) . '\', ' . - 'map=\'' . mysql_real_escape_string( $map ) . '\', ' . - 'tileset=\'' . mysql_real_escape_string( $tileset ) . '\', ' . - 'activeSlots=\'' . mysql_real_escape_string( $activeSlots ) . '\', ' . - 'networkSlots=\'' . mysql_real_escape_string( $networkSlots ) . '\', ' . - 'connectedClients=\'' . mysql_real_escape_string( $connectedClients ) . '\', ' . - 'externalServerPort=\''. mysql_real_escape_string( $service_port ) . '\', ' . - 'status=\'' . mysql_real_escape_string( $status ) . '\', ' . - 'lasttime=' . 'now()' . ' ' . - 'WHERE ' . $whereClause); - //updateServer($remote_ip, $service_port, $serverTitle, $connectedClients, $networkSlots); - echo 'OK'; - } - else if ($status == 2) - { - - if ( extension_loaded('geoip') ) { - - if ( $privacyPlease == 0 ) - { - $country = geoip_country_code_by_name( $remote_ip ); - } - else - { - $country = ''; - } - } - - // cleanup old entrys with same remote port and ip - // I hope this fixes those double entrys of servers - mysql_query( 'DELETE FROM glestserver WHERE '. $whereClause ); - - // insert new entry - mysql_query( 'INSERT INTO glestserver SET ' . - 'glestVersion=\'' . mysql_real_escape_string( $glestVersion ) . '\', ' . - 'platform=\'' . mysql_real_escape_string( $platform ) . '\', ' . - 'binaryCompileDate=\'' . mysql_real_escape_string( $binaryCompileDate ) . '\', ' . - 'serverTitle=\'' . mysql_real_escape_string( $serverTitle ) . '\', ' . - 'ip=\'' . mysql_real_escape_string( $remote_ip ) . '\', ' . - 'tech=\'' . mysql_real_escape_string( $tech ) . '\', ' . - 'map=\'' . mysql_real_escape_string( $map ) . '\', ' . - 'tileset=\'' . mysql_real_escape_string( $tileset ) . '\', ' . - 'activeSlots=\'' . mysql_real_escape_string( $activeSlots ) . '\', ' . - 'networkSlots=\'' . mysql_real_escape_string( $networkSlots ) . '\', ' . - 'connectedClients=\'' . mysql_real_escape_string( $connectedClients ) . '\', ' . - 'externalServerPort=\''. mysql_real_escape_string( $service_port ) . '\', ' . - 'country=\'' . mysql_real_escape_string( $country ) . '\', ' . - 'status=\'' . mysql_real_escape_string( $status ) . '\', ' . - 'gameUUID=\'' . mysql_real_escape_string( $gameUUID ) . '\';' - ); - echo 'OK'; - } - } - else // this game server is not listed in the database, yet - { // check whether this game server is available from the Internet; if it is, add it to the database - sleep(8); // was 3 - $socket = socket_create( AF_INET, SOCK_STREAM, SOL_TCP ); - if ( $socket < 0 ) { - echo 'socket_create() failed.' . PHP_EOL . ' Reason: ' . socket_strerror( $socket ) . PHP_EOL; - } - socket_set_nonblock( $socket ) - or die( 'Unable to set nonblock on socket.' ); - - $timeout = 10; //timeout in seconds - echo 'Trying to connect to \'' . $remote_ip . '\' using port \'' . $service_port . '\'...' . PHP_EOL; - - $canconnect = true; - $time = time(); - error_reporting( E_ERROR ); - - for ( ; !@socket_connect( $socket, $remote_ip, $service_port ); ) - { - $socket_last_error = socket_last_error( $socket ); - if ( $socket_last_error == 115 || $socket_last_error == 114) - { - if ( ( time() - $time ) >= $timeout ) - { - $canconnect = false; - echo 'socket_connect() failed.' . PHP_EOL . ' Reason: (' . $socket_last_error . ') ' . socket_strerror( $socket_last_error ) . PHP_EOL; - break; - } - sleep( 1 ); - continue; - } - // for answers on this see: http://bobobobo.wordpress.com/2008/11/09/resolving-winsock-error-10035-wsaewouldblock/ - else if($socket_last_error == 10035 || $socket_last_error == 10037) { - break; - } - - $canconnect = false; - echo 'socket_connect() failed.' . PHP_EOL . ' Reason: (' . $socket_last_error . ') ' . socket_strerror( $socket_last_error ) . PHP_EOL; - break; - } - - socket_set_block( $socket ) - or die( 'Unable to set block on socket.' ); - - //echo "and now read ...."; - //$buf = socket_read($socket, 161); - //echo $buf ."\n"; - - // Make sure its a glest server connecting - // - // struct Data{ - // int8 messageType; - // NetworkString versionString; - // NetworkString name; - // int16 playerIndex; - // int8 gameState; - // }; - - - if ( $canconnect == true ) { - $data_from_server = socket_read( $socket, 1 ); - } - - - socket_close( $socket ); - - error_reporting( E_ALL ); - - if ( $canconnect == false ) - { - echo 'wrong router setup'; - } - /* - else if ( $data_from_server != 1 ) // insert serious verification here - { - echo "invalid handshake!"; - } - */ - else // connection to game server succeeded, protocol verification succeeded - { // add this game server to the database - if ( extension_loaded('geoip') ) { - - if ( $privacyPlease == 0 ) - { - $country = geoip_country_code_by_name( $remote_ip ); - } - else - { - $country = ''; - } - } - - // cleanup old entrys with same remote port and ip - // I hope this fixes those double entrys of servers - mysql_query( 'DELETE FROM glestserver WHERE '. $whereClause ); - // insert new entry - mysql_query( 'INSERT INTO glestserver SET ' . - 'glestVersion=\'' . mysql_real_escape_string( $glestVersion ) . '\', ' . - 'platform=\'' . mysql_real_escape_string( $platform ) . '\', ' . - 'binaryCompileDate=\'' . mysql_real_escape_string( $binaryCompileDate ) . '\', ' . - 'serverTitle=\'' . mysql_real_escape_string( $serverTitle ) . '\', ' . - 'ip=\'' . mysql_real_escape_string( $remote_ip ) . '\', ' . - 'tech=\'' . mysql_real_escape_string( $tech ) . '\', ' . - 'map=\'' . mysql_real_escape_string( $map ) . '\', ' . - 'tileset=\'' . mysql_real_escape_string( $tileset ) . '\', ' . - 'activeSlots=\'' . mysql_real_escape_string( $activeSlots ) . '\', ' . - 'networkSlots=\'' . mysql_real_escape_string( $networkSlots ) . '\', ' . - 'connectedClients=\'' . mysql_real_escape_string( $connectedClients ) . '\', ' . - 'externalServerPort=\''. mysql_real_escape_string( $service_port ) . '\', ' . - 'country=\'' . mysql_real_escape_string( $country ) . '\', ' . - 'status=\'' . mysql_real_escape_string( $status ) . '\', ' . - 'gameUUID=\'' . mysql_real_escape_string( $gameUUID ) . '\';' - ); - echo 'OK'; - //addLatestServer($remote_ip, $service_port, $serverTitle, $connectedClients, $networkSlots); - } - } - } - db_disconnect( DB_LINK ); -?> diff --git a/source/masterserver/cleanUpServerList.php b/source/masterserver/cleanUpServerList.php deleted file mode 100644 index 0e75d6ca..00000000 --- a/source/masterserver/cleanUpServerList.php +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/source/masterserver/config.php b/source/masterserver/config.php deleted file mode 100644 index a05a7ced..00000000 --- a/source/masterserver/config.php +++ /dev/null @@ -1,32 +0,0 @@ - diff --git a/source/masterserver/docs/AUTHORS.txt b/source/masterserver/docs/AUTHORS.txt deleted file mode 100644 index 73d1775a..00000000 --- a/source/masterserver/docs/AUTHORS.txt +++ /dev/null @@ -1,33 +0,0 @@ -* Copyrights * - -Except where otherwise noted, all of the documentation, multimedia and software -included in the MegaGlest setup package is copyrighted by The MegaGlest Team. - -Copyright (C) 2001-2014 The MegaGlest Team. All rights reserved. - -This software is provided without any express or implied warranty. In no event -shall the author be held liable for any damages arising from the use of this -software. - -This software may be redistributed freely, but all redistributions must retain -all occurences of the above copyright notice and web site addresses that are -currently in place and must provide full source code with ALL modifications. - - - -* Licensing * - -You can redistribute this code and/or modify it under the terms of the GNU -General Public License as published by the Free Software Foundation; either -version 3 of the License, or (at your option) any later version. - -The complete license is contained in this distribution in the file -'gnu_gpl_3.0.txt' and also available online at -http://www.gnu.org/licenses/gpl.html - -On Debian GNU/Linux systems (and derivates) please find license information in: -/usr/share/common-licenses/GPL -/usr/share/common-licenses/GPL-2 -/usr/share/common-licenses/GPL-2+ -/usr/share/common-licenses/GPL-3 -/usr/share/common-licenses/GPL-3+ diff --git a/source/masterserver/docs/README.txt b/source/masterserver/docs/README.txt deleted file mode 100644 index 7e05190a..00000000 --- a/source/masterserver/docs/README.txt +++ /dev/null @@ -1,66 +0,0 @@ -ABOUT - -This is the MegaGlest master server. MegaGlest (http://megaglest.org) is a -libre software cross platform real-time strategy game. - -This master server does the following: -· publish game hosts (when a user decides to host) -· list hosted games (HTML, CSV, JSON output) -· list recently hosted gamed (HTML output) - this code is currently disabled -· list available game mods (CSV output) -· provide a version check for game installations - -It uses a standard PHP/MySQL setup to achieve this. When instances of MegaGlest -engine based games publish their game information, they do so by pushing it to -this web server in regular intervals. Stale entries are removed when the next -client requests the list. When game instances retrieve the list of hosted games -or available game mods, they do so by pulling this information from the server. -Game and master server communicate using HTTP. The client sends requests by -HTTP GET passing along URL parameters while the server responds in a CSV format -or single field plain text. The version check is currently implemented as plain -text files (which use symbolic links for deduplication purposes) on the server. -This may be replaced by a single configurable PHP script in the future. - -The MegaGlest Team hosts a live copy of this code at - http://master.megaglest.org -Please do not use this instance for your tests, but set up a copy of your own. - - - -INSTALLATION - -1. Setup a web server with PHP and a MySQL database server. - Sucessfully tested configurations (on Debian GNU/Linux 6 and 7): - · Apache 2.2 + mod_php 5.3.3 - · Nginx 1.2.1 + fastcgi + PHP-FPM 5.4.4 - · MySQL Community Server/Edition 5.1 (Oracle) - · MySQL Server 5.5 (Percona) - -2. Create a new MySQL database and a user who has has all standard permissions - to work on this database after authentication. - Example: - CREATE DATABASE 'megaglest-master' ENGINE=InnoDB; - CREATE USER 'megaglest-master'@'localhost' IDENTIFIED BY 'secret password'; - GRANT ALL ON 'megaglest-master.*' TO 'megaglest-master'; - -3. Copy all files (you can omit INSTALL and install/) to your webserver and - edit config.php to reflect the MySQL connection parameters and game title; - also replace the images in images/ by some which match your game title. - -4. Connect the new user to the new database, then execute the SQL statments in - install/scheme_mysql.sql. - Example: - mysql -u megaglest-master -p megaglest-master < install/scheme_mysql.sql - -5. Set up the webserver to allow access to, and set up PHP to execute, the - PHP files you placed on your webserver. Practically you may want to create - a new "VirtualHost"/"Server" and make sure it points to where you placed - the files and can run PHP. - -To test and use this server with your MegaGlest engine based game, configure -the "Masterserver" property in glestuser.ini (if it's MegaGlest) or glest.ini -(if it's a different game). - -To add mods to the game mod menu, edit the database contents using your -favorite MySQL editor or develop a web based frontend to do so. In the latter -case, please let us know about it and try to use a compatible license. diff --git a/source/masterserver/docs/gnu_gpl_3.0.txt b/source/masterserver/docs/gnu_gpl_3.0.txt deleted file mode 100644 index 94a9ed02..00000000 --- a/source/masterserver/docs/gnu_gpl_3.0.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/source/masterserver/flags/README b/source/masterserver/flags/README deleted file mode 100644 index 46acef20..00000000 --- a/source/masterserver/flags/README +++ /dev/null @@ -1,12 +0,0 @@ -These flag icons have been copied from http://www.famfamfam.com where they are -made available under a Public Domain license. Some of the original content has -been removed. - -Original license: ------ -Flag icons - http://www.famfamfam.com -These icons are public domain, and as such are free for any use (attribution appreciated but not required). -Note that these flags are named using the ISO3166-1 alpha-2 country codes where appropriate. A list of codes can be found at http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 -If you find these icons useful, please donate via paypal to mjames@gmail.com (or click the donate button available at http://www.famfamfam.com/lab/icons/silk) -Contact: mjames@gmail.com ------ diff --git a/source/masterserver/flags/ad.png b/source/masterserver/flags/ad.png deleted file mode 100644 index 625ca84f..00000000 Binary files a/source/masterserver/flags/ad.png and /dev/null differ diff --git a/source/masterserver/flags/ae.png b/source/masterserver/flags/ae.png deleted file mode 100644 index ef3a1ecf..00000000 Binary files a/source/masterserver/flags/ae.png and /dev/null differ diff --git a/source/masterserver/flags/af.png b/source/masterserver/flags/af.png deleted file mode 100644 index a4742e29..00000000 Binary files a/source/masterserver/flags/af.png and /dev/null differ diff --git a/source/masterserver/flags/ag.png b/source/masterserver/flags/ag.png deleted file mode 100644 index 556d5504..00000000 Binary files a/source/masterserver/flags/ag.png and /dev/null differ diff --git a/source/masterserver/flags/ai.png b/source/masterserver/flags/ai.png deleted file mode 100644 index 74ed29d9..00000000 Binary files a/source/masterserver/flags/ai.png and /dev/null differ diff --git a/source/masterserver/flags/al.png b/source/masterserver/flags/al.png deleted file mode 100644 index 92354cb6..00000000 Binary files a/source/masterserver/flags/al.png and /dev/null differ diff --git a/source/masterserver/flags/am.png b/source/masterserver/flags/am.png deleted file mode 100644 index 344a2a86..00000000 Binary files a/source/masterserver/flags/am.png and /dev/null differ diff --git a/source/masterserver/flags/an.png b/source/masterserver/flags/an.png deleted file mode 100644 index 633e4b89..00000000 Binary files a/source/masterserver/flags/an.png and /dev/null differ diff --git a/source/masterserver/flags/ao.png b/source/masterserver/flags/ao.png deleted file mode 100644 index bcbd1d6d..00000000 Binary files a/source/masterserver/flags/ao.png and /dev/null differ diff --git a/source/masterserver/flags/ar.png b/source/masterserver/flags/ar.png deleted file mode 100644 index e5ef8f1f..00000000 Binary files a/source/masterserver/flags/ar.png and /dev/null differ diff --git a/source/masterserver/flags/as.png b/source/masterserver/flags/as.png deleted file mode 100644 index 32f30e4c..00000000 Binary files a/source/masterserver/flags/as.png and /dev/null differ diff --git a/source/masterserver/flags/at.png b/source/masterserver/flags/at.png deleted file mode 100644 index 0f15f34f..00000000 Binary files a/source/masterserver/flags/at.png and /dev/null differ diff --git a/source/masterserver/flags/au.png b/source/masterserver/flags/au.png deleted file mode 100644 index a01389a7..00000000 Binary files a/source/masterserver/flags/au.png and /dev/null differ diff --git a/source/masterserver/flags/aw.png b/source/masterserver/flags/aw.png deleted file mode 100644 index a3579c2d..00000000 Binary files a/source/masterserver/flags/aw.png and /dev/null differ diff --git a/source/masterserver/flags/ax.png b/source/masterserver/flags/ax.png deleted file mode 100644 index 1eea80a7..00000000 Binary files a/source/masterserver/flags/ax.png and /dev/null differ diff --git a/source/masterserver/flags/az.png b/source/masterserver/flags/az.png deleted file mode 100644 index 4ee9fe5c..00000000 Binary files a/source/masterserver/flags/az.png and /dev/null differ diff --git a/source/masterserver/flags/ba.png b/source/masterserver/flags/ba.png deleted file mode 100644 index c7749924..00000000 Binary files a/source/masterserver/flags/ba.png and /dev/null differ diff --git a/source/masterserver/flags/bb.png b/source/masterserver/flags/bb.png deleted file mode 100644 index 0df19c71..00000000 Binary files a/source/masterserver/flags/bb.png and /dev/null differ diff --git a/source/masterserver/flags/bd.png b/source/masterserver/flags/bd.png deleted file mode 100644 index 076a8bf8..00000000 Binary files a/source/masterserver/flags/bd.png and /dev/null differ diff --git a/source/masterserver/flags/be.png b/source/masterserver/flags/be.png deleted file mode 100644 index d86ebc80..00000000 Binary files a/source/masterserver/flags/be.png and /dev/null differ diff --git a/source/masterserver/flags/bf.png b/source/masterserver/flags/bf.png deleted file mode 100644 index ab5ce8fe..00000000 Binary files a/source/masterserver/flags/bf.png and /dev/null differ diff --git a/source/masterserver/flags/bg.png b/source/masterserver/flags/bg.png deleted file mode 100644 index 0469f060..00000000 Binary files a/source/masterserver/flags/bg.png and /dev/null differ diff --git a/source/masterserver/flags/bh.png b/source/masterserver/flags/bh.png deleted file mode 100644 index ea8ce687..00000000 Binary files a/source/masterserver/flags/bh.png and /dev/null differ diff --git a/source/masterserver/flags/bi.png b/source/masterserver/flags/bi.png deleted file mode 100644 index 5cc2e30c..00000000 Binary files a/source/masterserver/flags/bi.png and /dev/null differ diff --git a/source/masterserver/flags/bj.png b/source/masterserver/flags/bj.png deleted file mode 100644 index 1cc8b458..00000000 Binary files a/source/masterserver/flags/bj.png and /dev/null differ diff --git a/source/masterserver/flags/bm.png b/source/masterserver/flags/bm.png deleted file mode 100644 index c0c7aead..00000000 Binary files a/source/masterserver/flags/bm.png and /dev/null differ diff --git a/source/masterserver/flags/bn.png b/source/masterserver/flags/bn.png deleted file mode 100644 index 8fb09849..00000000 Binary files a/source/masterserver/flags/bn.png and /dev/null differ diff --git a/source/masterserver/flags/bo.png b/source/masterserver/flags/bo.png deleted file mode 100644 index ce7ba522..00000000 Binary files a/source/masterserver/flags/bo.png and /dev/null differ diff --git a/source/masterserver/flags/br.png b/source/masterserver/flags/br.png deleted file mode 100644 index 9b1a5538..00000000 Binary files a/source/masterserver/flags/br.png and /dev/null differ diff --git a/source/masterserver/flags/bs.png b/source/masterserver/flags/bs.png deleted file mode 100644 index 639fa6cf..00000000 Binary files a/source/masterserver/flags/bs.png and /dev/null differ diff --git a/source/masterserver/flags/bt.png b/source/masterserver/flags/bt.png deleted file mode 100644 index 1d512dff..00000000 Binary files a/source/masterserver/flags/bt.png and /dev/null differ diff --git a/source/masterserver/flags/bv.png b/source/masterserver/flags/bv.png deleted file mode 100644 index 160b6b5b..00000000 Binary files a/source/masterserver/flags/bv.png and /dev/null differ diff --git a/source/masterserver/flags/bw.png b/source/masterserver/flags/bw.png deleted file mode 100644 index fcb10394..00000000 Binary files a/source/masterserver/flags/bw.png and /dev/null differ diff --git a/source/masterserver/flags/by.png b/source/masterserver/flags/by.png deleted file mode 100644 index 504774ec..00000000 Binary files a/source/masterserver/flags/by.png and /dev/null differ diff --git a/source/masterserver/flags/bz.png b/source/masterserver/flags/bz.png deleted file mode 100644 index be63ee1c..00000000 Binary files a/source/masterserver/flags/bz.png and /dev/null differ diff --git a/source/masterserver/flags/ca.png b/source/masterserver/flags/ca.png deleted file mode 100644 index 1f204193..00000000 Binary files a/source/masterserver/flags/ca.png and /dev/null differ diff --git a/source/masterserver/flags/cc.png b/source/masterserver/flags/cc.png deleted file mode 100644 index aed3d3b4..00000000 Binary files a/source/masterserver/flags/cc.png and /dev/null differ diff --git a/source/masterserver/flags/cd.png b/source/masterserver/flags/cd.png deleted file mode 100644 index 5e489424..00000000 Binary files a/source/masterserver/flags/cd.png and /dev/null differ diff --git a/source/masterserver/flags/cf.png b/source/masterserver/flags/cf.png deleted file mode 100644 index da687bdc..00000000 Binary files a/source/masterserver/flags/cf.png and /dev/null differ diff --git a/source/masterserver/flags/cg.png b/source/masterserver/flags/cg.png deleted file mode 100644 index a859792e..00000000 Binary files a/source/masterserver/flags/cg.png and /dev/null differ diff --git a/source/masterserver/flags/ch.png b/source/masterserver/flags/ch.png deleted file mode 100644 index 242ec01a..00000000 Binary files a/source/masterserver/flags/ch.png and /dev/null differ diff --git a/source/masterserver/flags/ci.png b/source/masterserver/flags/ci.png deleted file mode 100644 index 3f2c62eb..00000000 Binary files a/source/masterserver/flags/ci.png and /dev/null differ diff --git a/source/masterserver/flags/ck.png b/source/masterserver/flags/ck.png deleted file mode 100644 index 746d3d6f..00000000 Binary files a/source/masterserver/flags/ck.png and /dev/null differ diff --git a/source/masterserver/flags/cl.png b/source/masterserver/flags/cl.png deleted file mode 100644 index 29c6d61b..00000000 Binary files a/source/masterserver/flags/cl.png and /dev/null differ diff --git a/source/masterserver/flags/cm.png b/source/masterserver/flags/cm.png deleted file mode 100644 index f65c5bd5..00000000 Binary files a/source/masterserver/flags/cm.png and /dev/null differ diff --git a/source/masterserver/flags/cn.png b/source/masterserver/flags/cn.png deleted file mode 100644 index 89144146..00000000 Binary files a/source/masterserver/flags/cn.png and /dev/null differ diff --git a/source/masterserver/flags/co.png b/source/masterserver/flags/co.png deleted file mode 100644 index a118ff4a..00000000 Binary files a/source/masterserver/flags/co.png and /dev/null differ diff --git a/source/masterserver/flags/cr.png b/source/masterserver/flags/cr.png deleted file mode 100644 index c7a37317..00000000 Binary files a/source/masterserver/flags/cr.png and /dev/null differ diff --git a/source/masterserver/flags/cs.png b/source/masterserver/flags/cs.png deleted file mode 100644 index 8254790c..00000000 Binary files a/source/masterserver/flags/cs.png and /dev/null differ diff --git a/source/masterserver/flags/cu.png b/source/masterserver/flags/cu.png deleted file mode 100644 index 083f1d61..00000000 Binary files a/source/masterserver/flags/cu.png and /dev/null differ diff --git a/source/masterserver/flags/cv.png b/source/masterserver/flags/cv.png deleted file mode 100644 index a63f7eaf..00000000 Binary files a/source/masterserver/flags/cv.png and /dev/null differ diff --git a/source/masterserver/flags/cx.png b/source/masterserver/flags/cx.png deleted file mode 100644 index 48e31adb..00000000 Binary files a/source/masterserver/flags/cx.png and /dev/null differ diff --git a/source/masterserver/flags/cy.png b/source/masterserver/flags/cy.png deleted file mode 100644 index 5b1ad6c0..00000000 Binary files a/source/masterserver/flags/cy.png and /dev/null differ diff --git a/source/masterserver/flags/cz.png b/source/masterserver/flags/cz.png deleted file mode 100644 index c8403dd2..00000000 Binary files a/source/masterserver/flags/cz.png and /dev/null differ diff --git a/source/masterserver/flags/de.png b/source/masterserver/flags/de.png deleted file mode 100644 index ac4a9773..00000000 Binary files a/source/masterserver/flags/de.png and /dev/null differ diff --git a/source/masterserver/flags/dj.png b/source/masterserver/flags/dj.png deleted file mode 100644 index 582af364..00000000 Binary files a/source/masterserver/flags/dj.png and /dev/null differ diff --git a/source/masterserver/flags/dk.png b/source/masterserver/flags/dk.png deleted file mode 100644 index e2993d3c..00000000 Binary files a/source/masterserver/flags/dk.png and /dev/null differ diff --git a/source/masterserver/flags/dm.png b/source/masterserver/flags/dm.png deleted file mode 100644 index 5fbffcba..00000000 Binary files a/source/masterserver/flags/dm.png and /dev/null differ diff --git a/source/masterserver/flags/do.png b/source/masterserver/flags/do.png deleted file mode 100644 index 5a04932d..00000000 Binary files a/source/masterserver/flags/do.png and /dev/null differ diff --git a/source/masterserver/flags/dz.png b/source/masterserver/flags/dz.png deleted file mode 100644 index 335c2391..00000000 Binary files a/source/masterserver/flags/dz.png and /dev/null differ diff --git a/source/masterserver/flags/ec.png b/source/masterserver/flags/ec.png deleted file mode 100644 index 0caa0b1e..00000000 Binary files a/source/masterserver/flags/ec.png and /dev/null differ diff --git a/source/masterserver/flags/ee.png b/source/masterserver/flags/ee.png deleted file mode 100644 index 0c82efb7..00000000 Binary files a/source/masterserver/flags/ee.png and /dev/null differ diff --git a/source/masterserver/flags/eg.png b/source/masterserver/flags/eg.png deleted file mode 100644 index 8a3f7a10..00000000 Binary files a/source/masterserver/flags/eg.png and /dev/null differ diff --git a/source/masterserver/flags/eh.png b/source/masterserver/flags/eh.png deleted file mode 100644 index 90a1195b..00000000 Binary files a/source/masterserver/flags/eh.png and /dev/null differ diff --git a/source/masterserver/flags/er.png b/source/masterserver/flags/er.png deleted file mode 100644 index 13065ae9..00000000 Binary files a/source/masterserver/flags/er.png and /dev/null differ diff --git a/source/masterserver/flags/es.png b/source/masterserver/flags/es.png deleted file mode 100644 index c2de2d71..00000000 Binary files a/source/masterserver/flags/es.png and /dev/null differ diff --git a/source/masterserver/flags/et.png b/source/masterserver/flags/et.png deleted file mode 100644 index 2e893fa0..00000000 Binary files a/source/masterserver/flags/et.png and /dev/null differ diff --git a/source/masterserver/flags/fi.png b/source/masterserver/flags/fi.png deleted file mode 100644 index 14ec091b..00000000 Binary files a/source/masterserver/flags/fi.png and /dev/null differ diff --git a/source/masterserver/flags/fj.png b/source/masterserver/flags/fj.png deleted file mode 100644 index cee99889..00000000 Binary files a/source/masterserver/flags/fj.png and /dev/null differ diff --git a/source/masterserver/flags/fk.png b/source/masterserver/flags/fk.png deleted file mode 100644 index ceaeb27d..00000000 Binary files a/source/masterserver/flags/fk.png and /dev/null differ diff --git a/source/masterserver/flags/fm.png b/source/masterserver/flags/fm.png deleted file mode 100644 index 066bb247..00000000 Binary files a/source/masterserver/flags/fm.png and /dev/null differ diff --git a/source/masterserver/flags/fo.png b/source/masterserver/flags/fo.png deleted file mode 100644 index cbceb809..00000000 Binary files a/source/masterserver/flags/fo.png and /dev/null differ diff --git a/source/masterserver/flags/fr.png b/source/masterserver/flags/fr.png deleted file mode 100644 index 8332c4ec..00000000 Binary files a/source/masterserver/flags/fr.png and /dev/null differ diff --git a/source/masterserver/flags/ga.png b/source/masterserver/flags/ga.png deleted file mode 100644 index 0e0d4343..00000000 Binary files a/source/masterserver/flags/ga.png and /dev/null differ diff --git a/source/masterserver/flags/gb.png b/source/masterserver/flags/gb.png deleted file mode 100644 index ff701e19..00000000 Binary files a/source/masterserver/flags/gb.png and /dev/null differ diff --git a/source/masterserver/flags/gd.png b/source/masterserver/flags/gd.png deleted file mode 100644 index 9ab57f54..00000000 Binary files a/source/masterserver/flags/gd.png and /dev/null differ diff --git a/source/masterserver/flags/ge.png b/source/masterserver/flags/ge.png deleted file mode 100644 index 728d9707..00000000 Binary files a/source/masterserver/flags/ge.png and /dev/null differ diff --git a/source/masterserver/flags/gf.png b/source/masterserver/flags/gf.png deleted file mode 100644 index 8332c4ec..00000000 Binary files a/source/masterserver/flags/gf.png and /dev/null differ diff --git a/source/masterserver/flags/gh.png b/source/masterserver/flags/gh.png deleted file mode 100644 index 4e2f8965..00000000 Binary files a/source/masterserver/flags/gh.png and /dev/null differ diff --git a/source/masterserver/flags/gi.png b/source/masterserver/flags/gi.png deleted file mode 100644 index e76797f6..00000000 Binary files a/source/masterserver/flags/gi.png and /dev/null differ diff --git a/source/masterserver/flags/gl.png b/source/masterserver/flags/gl.png deleted file mode 100644 index ef12a73b..00000000 Binary files a/source/masterserver/flags/gl.png and /dev/null differ diff --git a/source/masterserver/flags/gm.png b/source/masterserver/flags/gm.png deleted file mode 100644 index 0720b667..00000000 Binary files a/source/masterserver/flags/gm.png and /dev/null differ diff --git a/source/masterserver/flags/gn.png b/source/masterserver/flags/gn.png deleted file mode 100644 index ea660b01..00000000 Binary files a/source/masterserver/flags/gn.png and /dev/null differ diff --git a/source/masterserver/flags/gp.png b/source/masterserver/flags/gp.png deleted file mode 100644 index dbb086d0..00000000 Binary files a/source/masterserver/flags/gp.png and /dev/null differ diff --git a/source/masterserver/flags/gq.png b/source/masterserver/flags/gq.png deleted file mode 100644 index ebe20a28..00000000 Binary files a/source/masterserver/flags/gq.png and /dev/null differ diff --git a/source/masterserver/flags/gr.png b/source/masterserver/flags/gr.png deleted file mode 100644 index 8651ade7..00000000 Binary files a/source/masterserver/flags/gr.png and /dev/null differ diff --git a/source/masterserver/flags/gs.png b/source/masterserver/flags/gs.png deleted file mode 100644 index 7ef0bf59..00000000 Binary files a/source/masterserver/flags/gs.png and /dev/null differ diff --git a/source/masterserver/flags/gt.png b/source/masterserver/flags/gt.png deleted file mode 100644 index c43a70d3..00000000 Binary files a/source/masterserver/flags/gt.png and /dev/null differ diff --git a/source/masterserver/flags/gu.png b/source/masterserver/flags/gu.png deleted file mode 100644 index 92f37c05..00000000 Binary files a/source/masterserver/flags/gu.png and /dev/null differ diff --git a/source/masterserver/flags/gw.png b/source/masterserver/flags/gw.png deleted file mode 100644 index b37bcf06..00000000 Binary files a/source/masterserver/flags/gw.png and /dev/null differ diff --git a/source/masterserver/flags/gy.png b/source/masterserver/flags/gy.png deleted file mode 100644 index 22cbe2f5..00000000 Binary files a/source/masterserver/flags/gy.png and /dev/null differ diff --git a/source/masterserver/flags/hk.png b/source/masterserver/flags/hk.png deleted file mode 100644 index d5c380ca..00000000 Binary files a/source/masterserver/flags/hk.png and /dev/null differ diff --git a/source/masterserver/flags/hm.png b/source/masterserver/flags/hm.png deleted file mode 100644 index a01389a7..00000000 Binary files a/source/masterserver/flags/hm.png and /dev/null differ diff --git a/source/masterserver/flags/hn.png b/source/masterserver/flags/hn.png deleted file mode 100644 index 96f83885..00000000 Binary files a/source/masterserver/flags/hn.png and /dev/null differ diff --git a/source/masterserver/flags/hr.png b/source/masterserver/flags/hr.png deleted file mode 100644 index 696b5154..00000000 Binary files a/source/masterserver/flags/hr.png and /dev/null differ diff --git a/source/masterserver/flags/ht.png b/source/masterserver/flags/ht.png deleted file mode 100644 index 416052af..00000000 Binary files a/source/masterserver/flags/ht.png and /dev/null differ diff --git a/source/masterserver/flags/hu.png b/source/masterserver/flags/hu.png deleted file mode 100644 index 7baafe44..00000000 Binary files a/source/masterserver/flags/hu.png and /dev/null differ diff --git a/source/masterserver/flags/id.png b/source/masterserver/flags/id.png deleted file mode 100644 index c6bc0faf..00000000 Binary files a/source/masterserver/flags/id.png and /dev/null differ diff --git a/source/masterserver/flags/ie.png b/source/masterserver/flags/ie.png deleted file mode 100644 index 26baa31e..00000000 Binary files a/source/masterserver/flags/ie.png and /dev/null differ diff --git a/source/masterserver/flags/il.png b/source/masterserver/flags/il.png deleted file mode 100644 index 2ca772d0..00000000 Binary files a/source/masterserver/flags/il.png and /dev/null differ diff --git a/source/masterserver/flags/in.png b/source/masterserver/flags/in.png deleted file mode 100644 index e4d7e81a..00000000 Binary files a/source/masterserver/flags/in.png and /dev/null differ diff --git a/source/masterserver/flags/io.png b/source/masterserver/flags/io.png deleted file mode 100644 index 3e74b6a3..00000000 Binary files a/source/masterserver/flags/io.png and /dev/null differ diff --git a/source/masterserver/flags/iq.png b/source/masterserver/flags/iq.png deleted file mode 100644 index 878a3514..00000000 Binary files a/source/masterserver/flags/iq.png and /dev/null differ diff --git a/source/masterserver/flags/ir.png b/source/masterserver/flags/ir.png deleted file mode 100644 index c5fd136a..00000000 Binary files a/source/masterserver/flags/ir.png and /dev/null differ diff --git a/source/masterserver/flags/is.png b/source/masterserver/flags/is.png deleted file mode 100644 index b8f6d0f0..00000000 Binary files a/source/masterserver/flags/is.png and /dev/null differ diff --git a/source/masterserver/flags/it.png b/source/masterserver/flags/it.png deleted file mode 100644 index 89692f74..00000000 Binary files a/source/masterserver/flags/it.png and /dev/null differ diff --git a/source/masterserver/flags/jm.png b/source/masterserver/flags/jm.png deleted file mode 100644 index 7be119e0..00000000 Binary files a/source/masterserver/flags/jm.png and /dev/null differ diff --git a/source/masterserver/flags/jo.png b/source/masterserver/flags/jo.png deleted file mode 100644 index 11bd4972..00000000 Binary files a/source/masterserver/flags/jo.png and /dev/null differ diff --git a/source/masterserver/flags/jp.png b/source/masterserver/flags/jp.png deleted file mode 100644 index 325fbad3..00000000 Binary files a/source/masterserver/flags/jp.png and /dev/null differ diff --git a/source/masterserver/flags/ke.png b/source/masterserver/flags/ke.png deleted file mode 100644 index 51879adf..00000000 Binary files a/source/masterserver/flags/ke.png and /dev/null differ diff --git a/source/masterserver/flags/kg.png b/source/masterserver/flags/kg.png deleted file mode 100644 index 0a818f67..00000000 Binary files a/source/masterserver/flags/kg.png and /dev/null differ diff --git a/source/masterserver/flags/kh.png b/source/masterserver/flags/kh.png deleted file mode 100644 index 30f6bb1b..00000000 Binary files a/source/masterserver/flags/kh.png and /dev/null differ diff --git a/source/masterserver/flags/ki.png b/source/masterserver/flags/ki.png deleted file mode 100644 index 2dcce4b3..00000000 Binary files a/source/masterserver/flags/ki.png and /dev/null differ diff --git a/source/masterserver/flags/km.png b/source/masterserver/flags/km.png deleted file mode 100644 index 812b2f56..00000000 Binary files a/source/masterserver/flags/km.png and /dev/null differ diff --git a/source/masterserver/flags/kn.png b/source/masterserver/flags/kn.png deleted file mode 100644 index febd5b48..00000000 Binary files a/source/masterserver/flags/kn.png and /dev/null differ diff --git a/source/masterserver/flags/kp.png b/source/masterserver/flags/kp.png deleted file mode 100644 index d3d509aa..00000000 Binary files a/source/masterserver/flags/kp.png and /dev/null differ diff --git a/source/masterserver/flags/kr.png b/source/masterserver/flags/kr.png deleted file mode 100644 index 9c0a78eb..00000000 Binary files a/source/masterserver/flags/kr.png and /dev/null differ diff --git a/source/masterserver/flags/kw.png b/source/masterserver/flags/kw.png deleted file mode 100644 index 96546da3..00000000 Binary files a/source/masterserver/flags/kw.png and /dev/null differ diff --git a/source/masterserver/flags/ky.png b/source/masterserver/flags/ky.png deleted file mode 100644 index 15c5f8e4..00000000 Binary files a/source/masterserver/flags/ky.png and /dev/null differ diff --git a/source/masterserver/flags/kz.png b/source/masterserver/flags/kz.png deleted file mode 100644 index 45a8c887..00000000 Binary files a/source/masterserver/flags/kz.png and /dev/null differ diff --git a/source/masterserver/flags/la.png b/source/masterserver/flags/la.png deleted file mode 100644 index e28acd01..00000000 Binary files a/source/masterserver/flags/la.png and /dev/null differ diff --git a/source/masterserver/flags/lb.png b/source/masterserver/flags/lb.png deleted file mode 100644 index d0d452bf..00000000 Binary files a/source/masterserver/flags/lb.png and /dev/null differ diff --git a/source/masterserver/flags/lc.png b/source/masterserver/flags/lc.png deleted file mode 100644 index a47d0655..00000000 Binary files a/source/masterserver/flags/lc.png and /dev/null differ diff --git a/source/masterserver/flags/li.png b/source/masterserver/flags/li.png deleted file mode 100644 index 6469909c..00000000 Binary files a/source/masterserver/flags/li.png and /dev/null differ diff --git a/source/masterserver/flags/lk.png b/source/masterserver/flags/lk.png deleted file mode 100644 index 088aad6d..00000000 Binary files a/source/masterserver/flags/lk.png and /dev/null differ diff --git a/source/masterserver/flags/lr.png b/source/masterserver/flags/lr.png deleted file mode 100644 index 89a5bc7e..00000000 Binary files a/source/masterserver/flags/lr.png and /dev/null differ diff --git a/source/masterserver/flags/ls.png b/source/masterserver/flags/ls.png deleted file mode 100644 index 33fdef10..00000000 Binary files a/source/masterserver/flags/ls.png and /dev/null differ diff --git a/source/masterserver/flags/lt.png b/source/masterserver/flags/lt.png deleted file mode 100644 index c8ef0da0..00000000 Binary files a/source/masterserver/flags/lt.png and /dev/null differ diff --git a/source/masterserver/flags/lu.png b/source/masterserver/flags/lu.png deleted file mode 100644 index 4cabba98..00000000 Binary files a/source/masterserver/flags/lu.png and /dev/null differ diff --git a/source/masterserver/flags/lv.png b/source/masterserver/flags/lv.png deleted file mode 100644 index 49b69981..00000000 Binary files a/source/masterserver/flags/lv.png and /dev/null differ diff --git a/source/masterserver/flags/ly.png b/source/masterserver/flags/ly.png deleted file mode 100644 index b163a9f8..00000000 Binary files a/source/masterserver/flags/ly.png and /dev/null differ diff --git a/source/masterserver/flags/ma.png b/source/masterserver/flags/ma.png deleted file mode 100644 index f3867702..00000000 Binary files a/source/masterserver/flags/ma.png and /dev/null differ diff --git a/source/masterserver/flags/mc.png b/source/masterserver/flags/mc.png deleted file mode 100644 index 1aa830f1..00000000 Binary files a/source/masterserver/flags/mc.png and /dev/null differ diff --git a/source/masterserver/flags/md.png b/source/masterserver/flags/md.png deleted file mode 100644 index 4e92c189..00000000 Binary files a/source/masterserver/flags/md.png and /dev/null differ diff --git a/source/masterserver/flags/me.png b/source/masterserver/flags/me.png deleted file mode 100644 index ac725355..00000000 Binary files a/source/masterserver/flags/me.png and /dev/null differ diff --git a/source/masterserver/flags/mg.png b/source/masterserver/flags/mg.png deleted file mode 100644 index d2715b3d..00000000 Binary files a/source/masterserver/flags/mg.png and /dev/null differ diff --git a/source/masterserver/flags/mh.png b/source/masterserver/flags/mh.png deleted file mode 100644 index fb523a8c..00000000 Binary files a/source/masterserver/flags/mh.png and /dev/null differ diff --git a/source/masterserver/flags/mk.png b/source/masterserver/flags/mk.png deleted file mode 100644 index db173aaf..00000000 Binary files a/source/masterserver/flags/mk.png and /dev/null differ diff --git a/source/masterserver/flags/ml.png b/source/masterserver/flags/ml.png deleted file mode 100644 index 2cec8ba4..00000000 Binary files a/source/masterserver/flags/ml.png and /dev/null differ diff --git a/source/masterserver/flags/mm.png b/source/masterserver/flags/mm.png deleted file mode 100644 index f464f67f..00000000 Binary files a/source/masterserver/flags/mm.png and /dev/null differ diff --git a/source/masterserver/flags/mn.png b/source/masterserver/flags/mn.png deleted file mode 100644 index 9396355d..00000000 Binary files a/source/masterserver/flags/mn.png and /dev/null differ diff --git a/source/masterserver/flags/mo.png b/source/masterserver/flags/mo.png deleted file mode 100644 index deb801dd..00000000 Binary files a/source/masterserver/flags/mo.png and /dev/null differ diff --git a/source/masterserver/flags/mp.png b/source/masterserver/flags/mp.png deleted file mode 100644 index 298d588b..00000000 Binary files a/source/masterserver/flags/mp.png and /dev/null differ diff --git a/source/masterserver/flags/mq.png b/source/masterserver/flags/mq.png deleted file mode 100644 index 010143b3..00000000 Binary files a/source/masterserver/flags/mq.png and /dev/null differ diff --git a/source/masterserver/flags/mr.png b/source/masterserver/flags/mr.png deleted file mode 100644 index 319546b1..00000000 Binary files a/source/masterserver/flags/mr.png and /dev/null differ diff --git a/source/masterserver/flags/ms.png b/source/masterserver/flags/ms.png deleted file mode 100644 index d4cbb433..00000000 Binary files a/source/masterserver/flags/ms.png and /dev/null differ diff --git a/source/masterserver/flags/mt.png b/source/masterserver/flags/mt.png deleted file mode 100644 index 00af9487..00000000 Binary files a/source/masterserver/flags/mt.png and /dev/null differ diff --git a/source/masterserver/flags/mu.png b/source/masterserver/flags/mu.png deleted file mode 100644 index b7fdce1b..00000000 Binary files a/source/masterserver/flags/mu.png and /dev/null differ diff --git a/source/masterserver/flags/mv.png b/source/masterserver/flags/mv.png deleted file mode 100644 index 5073d9ec..00000000 Binary files a/source/masterserver/flags/mv.png and /dev/null differ diff --git a/source/masterserver/flags/mw.png b/source/masterserver/flags/mw.png deleted file mode 100644 index 13886e9f..00000000 Binary files a/source/masterserver/flags/mw.png and /dev/null differ diff --git a/source/masterserver/flags/mx.png b/source/masterserver/flags/mx.png deleted file mode 100644 index 5bc58ab3..00000000 Binary files a/source/masterserver/flags/mx.png and /dev/null differ diff --git a/source/masterserver/flags/my.png b/source/masterserver/flags/my.png deleted file mode 100644 index 9034cbab..00000000 Binary files a/source/masterserver/flags/my.png and /dev/null differ diff --git a/source/masterserver/flags/mz.png b/source/masterserver/flags/mz.png deleted file mode 100644 index 76405e06..00000000 Binary files a/source/masterserver/flags/mz.png and /dev/null differ diff --git a/source/masterserver/flags/na.png b/source/masterserver/flags/na.png deleted file mode 100644 index 63358c67..00000000 Binary files a/source/masterserver/flags/na.png and /dev/null differ diff --git a/source/masterserver/flags/nc.png b/source/masterserver/flags/nc.png deleted file mode 100644 index 2cad2837..00000000 Binary files a/source/masterserver/flags/nc.png and /dev/null differ diff --git a/source/masterserver/flags/ne.png b/source/masterserver/flags/ne.png deleted file mode 100644 index d85f424f..00000000 Binary files a/source/masterserver/flags/ne.png and /dev/null differ diff --git a/source/masterserver/flags/nf.png b/source/masterserver/flags/nf.png deleted file mode 100644 index f9bcdda1..00000000 Binary files a/source/masterserver/flags/nf.png and /dev/null differ diff --git a/source/masterserver/flags/ng.png b/source/masterserver/flags/ng.png deleted file mode 100644 index 3eea2e02..00000000 Binary files a/source/masterserver/flags/ng.png and /dev/null differ diff --git a/source/masterserver/flags/ni.png b/source/masterserver/flags/ni.png deleted file mode 100644 index 3969aaaa..00000000 Binary files a/source/masterserver/flags/ni.png and /dev/null differ diff --git a/source/masterserver/flags/nl.png b/source/masterserver/flags/nl.png deleted file mode 100644 index fe44791e..00000000 Binary files a/source/masterserver/flags/nl.png and /dev/null differ diff --git a/source/masterserver/flags/no.png b/source/masterserver/flags/no.png deleted file mode 100644 index 160b6b5b..00000000 Binary files a/source/masterserver/flags/no.png and /dev/null differ diff --git a/source/masterserver/flags/np.png b/source/masterserver/flags/np.png deleted file mode 100644 index aeb058b7..00000000 Binary files a/source/masterserver/flags/np.png and /dev/null differ diff --git a/source/masterserver/flags/nr.png b/source/masterserver/flags/nr.png deleted file mode 100644 index 705fc337..00000000 Binary files a/source/masterserver/flags/nr.png and /dev/null differ diff --git a/source/masterserver/flags/nu.png b/source/masterserver/flags/nu.png deleted file mode 100644 index c3ce4aed..00000000 Binary files a/source/masterserver/flags/nu.png and /dev/null differ diff --git a/source/masterserver/flags/nz.png b/source/masterserver/flags/nz.png deleted file mode 100644 index 10d6306d..00000000 Binary files a/source/masterserver/flags/nz.png and /dev/null differ diff --git a/source/masterserver/flags/om.png b/source/masterserver/flags/om.png deleted file mode 100644 index 2ffba7e8..00000000 Binary files a/source/masterserver/flags/om.png and /dev/null differ diff --git a/source/masterserver/flags/pa.png b/source/masterserver/flags/pa.png deleted file mode 100644 index 9b2ee9a7..00000000 Binary files a/source/masterserver/flags/pa.png and /dev/null differ diff --git a/source/masterserver/flags/pe.png b/source/masterserver/flags/pe.png deleted file mode 100644 index 62a04977..00000000 Binary files a/source/masterserver/flags/pe.png and /dev/null differ diff --git a/source/masterserver/flags/pf.png b/source/masterserver/flags/pf.png deleted file mode 100644 index 771a0f65..00000000 Binary files a/source/masterserver/flags/pf.png and /dev/null differ diff --git a/source/masterserver/flags/pg.png b/source/masterserver/flags/pg.png deleted file mode 100644 index 10d62334..00000000 Binary files a/source/masterserver/flags/pg.png and /dev/null differ diff --git a/source/masterserver/flags/ph.png b/source/masterserver/flags/ph.png deleted file mode 100644 index b89e1593..00000000 Binary files a/source/masterserver/flags/ph.png and /dev/null differ diff --git a/source/masterserver/flags/pk.png b/source/masterserver/flags/pk.png deleted file mode 100644 index e9df70ca..00000000 Binary files a/source/masterserver/flags/pk.png and /dev/null differ diff --git a/source/masterserver/flags/pl.png b/source/masterserver/flags/pl.png deleted file mode 100644 index d413d010..00000000 Binary files a/source/masterserver/flags/pl.png and /dev/null differ diff --git a/source/masterserver/flags/pm.png b/source/masterserver/flags/pm.png deleted file mode 100644 index ba91d2c7..00000000 Binary files a/source/masterserver/flags/pm.png and /dev/null differ diff --git a/source/masterserver/flags/pn.png b/source/masterserver/flags/pn.png deleted file mode 100644 index aa9344f5..00000000 Binary files a/source/masterserver/flags/pn.png and /dev/null differ diff --git a/source/masterserver/flags/pr.png b/source/masterserver/flags/pr.png deleted file mode 100644 index 82d9130d..00000000 Binary files a/source/masterserver/flags/pr.png and /dev/null differ diff --git a/source/masterserver/flags/ps.png b/source/masterserver/flags/ps.png deleted file mode 100644 index f5f54776..00000000 Binary files a/source/masterserver/flags/ps.png and /dev/null differ diff --git a/source/masterserver/flags/pt.png b/source/masterserver/flags/pt.png deleted file mode 100644 index ece79801..00000000 Binary files a/source/masterserver/flags/pt.png and /dev/null differ diff --git a/source/masterserver/flags/pw.png b/source/masterserver/flags/pw.png deleted file mode 100644 index 6178b254..00000000 Binary files a/source/masterserver/flags/pw.png and /dev/null differ diff --git a/source/masterserver/flags/py.png b/source/masterserver/flags/py.png deleted file mode 100644 index cb8723c0..00000000 Binary files a/source/masterserver/flags/py.png and /dev/null differ diff --git a/source/masterserver/flags/qa.png b/source/masterserver/flags/qa.png deleted file mode 100644 index ed4c621f..00000000 Binary files a/source/masterserver/flags/qa.png and /dev/null differ diff --git a/source/masterserver/flags/re.png b/source/masterserver/flags/re.png deleted file mode 100644 index 8332c4ec..00000000 Binary files a/source/masterserver/flags/re.png and /dev/null differ diff --git a/source/masterserver/flags/ro.png b/source/masterserver/flags/ro.png deleted file mode 100644 index 57e74a65..00000000 Binary files a/source/masterserver/flags/ro.png and /dev/null differ diff --git a/source/masterserver/flags/rs.png b/source/masterserver/flags/rs.png deleted file mode 100644 index 9439a5b6..00000000 Binary files a/source/masterserver/flags/rs.png and /dev/null differ diff --git a/source/masterserver/flags/ru.png b/source/masterserver/flags/ru.png deleted file mode 100644 index 47da4214..00000000 Binary files a/source/masterserver/flags/ru.png and /dev/null differ diff --git a/source/masterserver/flags/rw.png b/source/masterserver/flags/rw.png deleted file mode 100644 index 53564917..00000000 Binary files a/source/masterserver/flags/rw.png and /dev/null differ diff --git a/source/masterserver/flags/sa.png b/source/masterserver/flags/sa.png deleted file mode 100644 index b4641c7e..00000000 Binary files a/source/masterserver/flags/sa.png and /dev/null differ diff --git a/source/masterserver/flags/sb.png b/source/masterserver/flags/sb.png deleted file mode 100644 index a9937ccf..00000000 Binary files a/source/masterserver/flags/sb.png and /dev/null differ diff --git a/source/masterserver/flags/sc.png b/source/masterserver/flags/sc.png deleted file mode 100644 index 39ee3718..00000000 Binary files a/source/masterserver/flags/sc.png and /dev/null differ diff --git a/source/masterserver/flags/sd.png b/source/masterserver/flags/sd.png deleted file mode 100644 index eaab69eb..00000000 Binary files a/source/masterserver/flags/sd.png and /dev/null differ diff --git a/source/masterserver/flags/se.png b/source/masterserver/flags/se.png deleted file mode 100644 index 1994653d..00000000 Binary files a/source/masterserver/flags/se.png and /dev/null differ diff --git a/source/masterserver/flags/sg.png b/source/masterserver/flags/sg.png deleted file mode 100644 index dd34d612..00000000 Binary files a/source/masterserver/flags/sg.png and /dev/null differ diff --git a/source/masterserver/flags/sh.png b/source/masterserver/flags/sh.png deleted file mode 100644 index 4b1d2a29..00000000 Binary files a/source/masterserver/flags/sh.png and /dev/null differ diff --git a/source/masterserver/flags/si.png b/source/masterserver/flags/si.png deleted file mode 100644 index bb1476ff..00000000 Binary files a/source/masterserver/flags/si.png and /dev/null differ diff --git a/source/masterserver/flags/sj.png b/source/masterserver/flags/sj.png deleted file mode 100644 index 160b6b5b..00000000 Binary files a/source/masterserver/flags/sj.png and /dev/null differ diff --git a/source/masterserver/flags/sk.png b/source/masterserver/flags/sk.png deleted file mode 100644 index 7ccbc827..00000000 Binary files a/source/masterserver/flags/sk.png and /dev/null differ diff --git a/source/masterserver/flags/sl.png b/source/masterserver/flags/sl.png deleted file mode 100644 index 12d812d2..00000000 Binary files a/source/masterserver/flags/sl.png and /dev/null differ diff --git a/source/masterserver/flags/sm.png b/source/masterserver/flags/sm.png deleted file mode 100644 index 3df2fdcf..00000000 Binary files a/source/masterserver/flags/sm.png and /dev/null differ diff --git a/source/masterserver/flags/sn.png b/source/masterserver/flags/sn.png deleted file mode 100644 index eabb71db..00000000 Binary files a/source/masterserver/flags/sn.png and /dev/null differ diff --git a/source/masterserver/flags/so.png b/source/masterserver/flags/so.png deleted file mode 100644 index 4a1ea4b2..00000000 Binary files a/source/masterserver/flags/so.png and /dev/null differ diff --git a/source/masterserver/flags/sr.png b/source/masterserver/flags/sr.png deleted file mode 100644 index 5eff9271..00000000 Binary files a/source/masterserver/flags/sr.png and /dev/null differ diff --git a/source/masterserver/flags/st.png b/source/masterserver/flags/st.png deleted file mode 100644 index 2978557b..00000000 Binary files a/source/masterserver/flags/st.png and /dev/null differ diff --git a/source/masterserver/flags/sv.png b/source/masterserver/flags/sv.png deleted file mode 100644 index 24987990..00000000 Binary files a/source/masterserver/flags/sv.png and /dev/null differ diff --git a/source/masterserver/flags/sy.png b/source/masterserver/flags/sy.png deleted file mode 100644 index f5ce30dc..00000000 Binary files a/source/masterserver/flags/sy.png and /dev/null differ diff --git a/source/masterserver/flags/sz.png b/source/masterserver/flags/sz.png deleted file mode 100644 index 914ee861..00000000 Binary files a/source/masterserver/flags/sz.png and /dev/null differ diff --git a/source/masterserver/flags/tc.png b/source/masterserver/flags/tc.png deleted file mode 100644 index 8fc1156b..00000000 Binary files a/source/masterserver/flags/tc.png and /dev/null differ diff --git a/source/masterserver/flags/td.png b/source/masterserver/flags/td.png deleted file mode 100644 index 667f21fd..00000000 Binary files a/source/masterserver/flags/td.png and /dev/null differ diff --git a/source/masterserver/flags/tf.png b/source/masterserver/flags/tf.png deleted file mode 100644 index 80529a43..00000000 Binary files a/source/masterserver/flags/tf.png and /dev/null differ diff --git a/source/masterserver/flags/tg.png b/source/masterserver/flags/tg.png deleted file mode 100644 index 3aa00ad4..00000000 Binary files a/source/masterserver/flags/tg.png and /dev/null differ diff --git a/source/masterserver/flags/th.png b/source/masterserver/flags/th.png deleted file mode 100644 index dd8ba917..00000000 Binary files a/source/masterserver/flags/th.png and /dev/null differ diff --git a/source/masterserver/flags/tj.png b/source/masterserver/flags/tj.png deleted file mode 100644 index 617bf645..00000000 Binary files a/source/masterserver/flags/tj.png and /dev/null differ diff --git a/source/masterserver/flags/tk.png b/source/masterserver/flags/tk.png deleted file mode 100644 index 67b8c8cb..00000000 Binary files a/source/masterserver/flags/tk.png and /dev/null differ diff --git a/source/masterserver/flags/tl.png b/source/masterserver/flags/tl.png deleted file mode 100644 index 77da181e..00000000 Binary files a/source/masterserver/flags/tl.png and /dev/null differ diff --git a/source/masterserver/flags/tm.png b/source/masterserver/flags/tm.png deleted file mode 100644 index 828020ec..00000000 Binary files a/source/masterserver/flags/tm.png and /dev/null differ diff --git a/source/masterserver/flags/tn.png b/source/masterserver/flags/tn.png deleted file mode 100644 index 183cdd3d..00000000 Binary files a/source/masterserver/flags/tn.png and /dev/null differ diff --git a/source/masterserver/flags/to.png b/source/masterserver/flags/to.png deleted file mode 100644 index f89b8ba7..00000000 Binary files a/source/masterserver/flags/to.png and /dev/null differ diff --git a/source/masterserver/flags/tr.png b/source/masterserver/flags/tr.png deleted file mode 100644 index be32f77e..00000000 Binary files a/source/masterserver/flags/tr.png and /dev/null differ diff --git a/source/masterserver/flags/tt.png b/source/masterserver/flags/tt.png deleted file mode 100644 index 2a11c1e2..00000000 Binary files a/source/masterserver/flags/tt.png and /dev/null differ diff --git a/source/masterserver/flags/tv.png b/source/masterserver/flags/tv.png deleted file mode 100644 index 28274c5f..00000000 Binary files a/source/masterserver/flags/tv.png and /dev/null differ diff --git a/source/masterserver/flags/tw.png b/source/masterserver/flags/tw.png deleted file mode 100644 index f31c654c..00000000 Binary files a/source/masterserver/flags/tw.png and /dev/null differ diff --git a/source/masterserver/flags/tz.png b/source/masterserver/flags/tz.png deleted file mode 100644 index c00ff796..00000000 Binary files a/source/masterserver/flags/tz.png and /dev/null differ diff --git a/source/masterserver/flags/ua.png b/source/masterserver/flags/ua.png deleted file mode 100644 index 09563a21..00000000 Binary files a/source/masterserver/flags/ua.png and /dev/null differ diff --git a/source/masterserver/flags/ug.png b/source/masterserver/flags/ug.png deleted file mode 100644 index 33f4affa..00000000 Binary files a/source/masterserver/flags/ug.png and /dev/null differ diff --git a/source/masterserver/flags/um.png b/source/masterserver/flags/um.png deleted file mode 100644 index c1dd9654..00000000 Binary files a/source/masterserver/flags/um.png and /dev/null differ diff --git a/source/masterserver/flags/us.png b/source/masterserver/flags/us.png deleted file mode 100644 index 10f451fe..00000000 Binary files a/source/masterserver/flags/us.png and /dev/null differ diff --git a/source/masterserver/flags/uy.png b/source/masterserver/flags/uy.png deleted file mode 100644 index 31d948a0..00000000 Binary files a/source/masterserver/flags/uy.png and /dev/null differ diff --git a/source/masterserver/flags/uz.png b/source/masterserver/flags/uz.png deleted file mode 100644 index fef5dc17..00000000 Binary files a/source/masterserver/flags/uz.png and /dev/null differ diff --git a/source/masterserver/flags/va.png b/source/masterserver/flags/va.png deleted file mode 100644 index b31eaf22..00000000 Binary files a/source/masterserver/flags/va.png and /dev/null differ diff --git a/source/masterserver/flags/vc.png b/source/masterserver/flags/vc.png deleted file mode 100644 index 8fa17b06..00000000 Binary files a/source/masterserver/flags/vc.png and /dev/null differ diff --git a/source/masterserver/flags/ve.png b/source/masterserver/flags/ve.png deleted file mode 100644 index 00c90f9a..00000000 Binary files a/source/masterserver/flags/ve.png and /dev/null differ diff --git a/source/masterserver/flags/vg.png b/source/masterserver/flags/vg.png deleted file mode 100644 index 41569079..00000000 Binary files a/source/masterserver/flags/vg.png and /dev/null differ diff --git a/source/masterserver/flags/vi.png b/source/masterserver/flags/vi.png deleted file mode 100644 index ed26915a..00000000 Binary files a/source/masterserver/flags/vi.png and /dev/null differ diff --git a/source/masterserver/flags/vn.png b/source/masterserver/flags/vn.png deleted file mode 100644 index ec7cd48a..00000000 Binary files a/source/masterserver/flags/vn.png and /dev/null differ diff --git a/source/masterserver/flags/vu.png b/source/masterserver/flags/vu.png deleted file mode 100644 index b3397bc6..00000000 Binary files a/source/masterserver/flags/vu.png and /dev/null differ diff --git a/source/masterserver/flags/wf.png b/source/masterserver/flags/wf.png deleted file mode 100644 index 9f955873..00000000 Binary files a/source/masterserver/flags/wf.png and /dev/null differ diff --git a/source/masterserver/flags/ws.png b/source/masterserver/flags/ws.png deleted file mode 100644 index c1695080..00000000 Binary files a/source/masterserver/flags/ws.png and /dev/null differ diff --git a/source/masterserver/flags/ye.png b/source/masterserver/flags/ye.png deleted file mode 100644 index 468dfad0..00000000 Binary files a/source/masterserver/flags/ye.png and /dev/null differ diff --git a/source/masterserver/flags/yt.png b/source/masterserver/flags/yt.png deleted file mode 100644 index c298f378..00000000 Binary files a/source/masterserver/flags/yt.png and /dev/null differ diff --git a/source/masterserver/flags/za.png b/source/masterserver/flags/za.png deleted file mode 100644 index 57c58e21..00000000 Binary files a/source/masterserver/flags/za.png and /dev/null differ diff --git a/source/masterserver/flags/zm.png b/source/masterserver/flags/zm.png deleted file mode 100644 index c25b07be..00000000 Binary files a/source/masterserver/flags/zm.png and /dev/null differ diff --git a/source/masterserver/flags/zw.png b/source/masterserver/flags/zw.png deleted file mode 100644 index 53c97259..00000000 Binary files a/source/masterserver/flags/zw.png and /dev/null differ diff --git a/source/masterserver/functions.php b/source/masterserver/functions.php deleted file mode 100644 index 3de8e3ac..00000000 --- a/source/masterserver/functions.php +++ /dev/null @@ -1,122 +0,0 @@ - here already, but then you don't filter non-visible bytes here) - //$text=strtolower($text); - //$code_entities_match = array('!','@','#','$','%','^','&','*','(',')','_','+','{','}','|','"','<','>','?','[',']','\\',';',"'",',','/','*','+','~','`','='); - //$code_entities_replace = array('','','','','','','','','','','','','','','','','','','','',''); - $code_entities_match = array('$','%','^','&','_','+','{','}','|','"','<','>','?','[',']','\\',';',"'",'/','+','~','`','='); - $code_entities_replace = array('','','','','','','','','','','','',''); - - $text = str_replace( $code_entities_match, $code_entities_replace, $text ); - return $text; - } - - function db_connect() - { - // If we may use persistent MYSQL database server links... - if ( defined( 'MYSQL_LINK_PERSIST' ) && MYSQL_LINK_PERSIST === true ) - { - // ...then reuse an existing link or create a new one, ... - $linkid = mysql_pconnect( MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD ); - } - else - { - // ...otherwise create a standard link - $linkid = mysql_connect( MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD ); - } - mysql_select_db( MYSQL_DATABASE ); - return $linkid; - } - - function db_disconnect( $linkid ) - { - // note that mysql_close() only closes non-persistent connections - return mysql_close( $linkid ); - } - - function get_localsubnet_ip_prefix() - { - // If this is supposed to match any RFC1918 or even any unroutable IP address space then this is far from complete. - // Consider using something like the 'IANA Private list' provided at http://sites.google.com/site/blocklist/ instead. - // The data in this list is a subset of what IANA makes available at http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xhtml - // Note that you may want/need to add in the IPv6 equivalent, too: http://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml - return "192."; - } - - function get_external_ip() - { - return $_SERVER['SERVER_ADDR']; - //return "209.52.70.192"; - } - - function cleanupServerList() - { - // on a busy server, this function should be invoked by cron in regular intervals instead (one SQL query less for the script) - mysql_query( 'DELETE FROM glestserver WHERE status <> 3 AND lasttime < DATE_add(NOW(), INTERVAL -1 minute);' ); - //return mysql_query( 'UPDATE glestserver SET status=\'???\' WHERE lasttime diff --git a/source/masterserver/images/game_icon.png b/source/masterserver/images/game_icon.png deleted file mode 100644 index 6782ad16..00000000 Binary files a/source/masterserver/images/game_icon.png and /dev/null differ diff --git a/source/masterserver/images/megaglest.ico b/source/masterserver/images/megaglest.ico deleted file mode 100644 index f2ce53b6..00000000 Binary files a/source/masterserver/images/megaglest.ico and /dev/null differ diff --git a/source/masterserver/index.php b/source/masterserver/index.php deleted file mode 100644 index c5d1bedb..00000000 --- a/source/masterserver/index.php +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/source/masterserver/install/scheme_mysql.sql b/source/masterserver/install/scheme_mysql.sql deleted file mode 100644 index b491ea5d..00000000 --- a/source/masterserver/install/scheme_mysql.sql +++ /dev/null @@ -1,166 +0,0 @@ --- --- Table structure for table `glestmaps` --- - -DROP TABLE IF EXISTS `glestmaps`; -CREATE TABLE `glestmaps` ( - `updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `glestversion` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `mapname` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `playercount` int(11) NOT NULL, - `crc` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `url` varchar(1024) COLLATE utf8_unicode_ci NOT NULL, - `imageUrl` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL, - `disabled` int(11) NOT NULL DEFAULT '0', - `crcnew` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - PRIMARY KEY (`mapname`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Table structure for table `glestscenarios` --- - -DROP TABLE IF EXISTS `glestscenarios`; -CREATE TABLE `glestscenarios` ( - `updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `glestversion` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `scenarioname` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `crc` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `url` varchar(1024) COLLATE utf8_unicode_ci NOT NULL, - `imageUrl` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL, - `disabled` int(11) NOT NULL DEFAULT '0', - `crcnew` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - PRIMARY KEY (`scenarioname`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Table structure for table `glestserver` --- - -DROP TABLE IF EXISTS `glestserver`; -CREATE TABLE `glestserver` ( - `lasttime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `glestVersion` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `platform` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `binaryCompileDate` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `serverTitle` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `ip` varchar(15) COLLATE utf8_unicode_ci NOT NULL, - `tech` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `map` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `tileset` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `activeSlots` int(11) NOT NULL, - `networkSlots` int(11) NOT NULL, - `connectedClients` int(11) NOT NULL, - `externalServerPort` int(11) NOT NULL, - `country` varchar(2) COLLATE utf8_unicode_ci NOT NULL, - `status` int(11) NOT NULL DEFAULT '0', - `gameUUID` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - KEY `lasttime` (`lasttime`) - KEY `gameUUID` (`gameUUID`) - KEY `status` (`status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Table structure for table `glestgamestats` --- - -DROP TABLE IF EXISTS `glestgamestats`; -CREATE TABLE `glestgamestats` ( - `lasttime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `gameUUID` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `tech` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `factionCount` int(11) NOT NULL, - `framesPlayed` int(11) NOT NULL, - `framesToCalculatePlaytime` int(11) NOT NULL, - `maxConcurrentUnitCount` int(11) NOT NULL, - `totalEndGameConcurrentUnitCount` int(11) NOT NULL, - `isHeadlessServer` int(11) NOT NULL, - - KEY `gameUUID` (`gameUUID`) - KEY `framesToCalculatePlaytime` (`framesToCalculatePlaytime`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Table structure for table `glestgameplayerstats` --- - -DROP TABLE IF EXISTS `glestgameplayerstats`; -CREATE TABLE `glestgameplayerstats` ( - `lasttime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `gameUUID` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `playerUUID` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `platform` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `factionIndex` int(11) NOT NULL, - `controlType` int(11) NOT NULL, - `resourceMultiplier` DECIMAL(10,6) NOT NULL, - `factionTypeName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - `personalityType` int(11) NOT NULL, - `teamIndex` int(11) NOT NULL, - `wonGame` int(11) NOT NULL, - `killCount` int(11) NOT NULL, - `enemyKillCount` int(11) NOT NULL, - `deathCount` int(11) NOT NULL, - `unitsProducedCount` int(11) NOT NULL, - `resourceHarvestedCount` int(11) NOT NULL, - `playerName` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, - `quitBeforeGameEnd` int(11) NOT NULL, - `quitTime` int(11) NOT NULL, - - KEY `gameUUID` (`gameUUID`) - KEY `playerUUID` (`playerUUID`) - KEY `platform` (`platform`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Table structure for table `glesttechs` --- - -DROP TABLE IF EXISTS `glesttechs`; -CREATE TABLE `glesttechs` ( - `updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `glestversion` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `techname` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `factioncount` int(11) NOT NULL, - `crc` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `url` varchar(1024) COLLATE utf8_unicode_ci NOT NULL, - `imageUrl` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL, - `disabled` int(11) NOT NULL DEFAULT '0', - `crcnew` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - PRIMARY KEY (`techname`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Table structure for table `glesttilesets` --- - -DROP TABLE IF EXISTS `glesttilesets`; -CREATE TABLE `glesttilesets` ( - `updatetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `glestversion` varchar(30) COLLATE utf8_unicode_ci NOT NULL, - `tilesetname` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `crc` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `url` varchar(1024) COLLATE utf8_unicode_ci NOT NULL, - `imageUrl` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL, - `disabled` int(11) NOT NULL DEFAULT '0', - `crcnew` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, - PRIMARY KEY (`tilesetname`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - --- --- Table structure for table `recent_servers` --- - -DROP TABLE IF EXISTS `recent_servers`; -CREATE TABLE `recent_servers` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `server` varchar(25) COLLATE utf8_unicode_ci NOT NULL, - `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL, - `players` varchar(10) COLLATE utf8_unicode_ci NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=550 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - - diff --git a/source/masterserver/robots.txt b/source/masterserver/robots.txt deleted file mode 100644 index 1f53798b..00000000 --- a/source/masterserver/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: / diff --git a/source/masterserver/scripts/desktop_notifications.js b/source/masterserver/scripts/desktop_notifications.js deleted file mode 100644 index 623e5614..00000000 --- a/source/masterserver/scripts/desktop_notifications.js +++ /dev/null @@ -1,355 +0,0 @@ -// Copyright (C) 2013 Mike Hoffert ("Omega") -// Licensed under GNU GPL v3.0 -// ============================================================== - -var DEFAULT_REFRESH_TIME = 20000; - -// Get query arguments -var get_data = {}; -var args = location.search.substr(1).split(/&/); -var version = ''; - -// Break up URL to find the get queries -for (var i = 0; i < args.length; i++) -{ - var tmp = args[i].split(/=/); - if(tmp[0] !== "") - { - get_data[decodeURIComponent(tmp[0])] = decodeURIComponent(tmp.slice(1).join("").replace("+", " ")); - } -} - -// Check if there's a version query -if(get_data['version']) -{ - version = get_data['version']; -} - -// Will store the data about servers last time we checked, so we can compare if there -// are any changes -var serverList = {}; -var firstLoop = true; - - -// Modify the document body -var domUl = document.getElementById("noJsUsage"); -var domBody = document.getElementsByTagName("body"); - -var wrapperDiv = document.createElement("div"); -wrapperDiv.innerHTML = "The parameters used by the masterserver API will display when you move your mouse pointer over any of the table headings.

" + - "
" + - " "; -wrapperDiv.style.paddingLeft = "30px"; - -domBody[0].insertBefore(wrapperDiv, domUl); -domUl.parentNode.removeChild(domUl); - - -// Modifying string object to support startsWith(String) function -// Created by CMS -if (typeof String.prototype.startsWith != 'function') { - // see below for better implementation! - String.prototype.startsWith = function (str){ - return this.indexOf(str) == 0; - }; -} - -// Request permission for issuing desktop notifications when the checkbox is ticked -var notifications = document.getElementById("enableNotifications"); -notifications.onclick = function() -{ - if(notifications.checked) - { - Notification.requestPermission(); - } -}; - - -// Helper function for escpaing special characters -function escapeHtml(text) { - return text.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'"); -} - - -// Check the JSON data for changes at intervals and update table -function timedRequest() -{ - // Break out if the checkbox isn't ticked - if(!notifications.checked) - { - return; - } - - // Get JSON of server list - var request = new XMLHttpRequest(); - request.open('GET', 'showServersJson.php', true); - request.send(); - - // Function calls as soon as we receive the right data from the site - request.onreadystatechange = function() - { - if (request.readyState === 4 && request.status === 200) - { - // Parse the JSON data for safety - var jsonText = JSON.parse(request.responseText); - var newServerList = {}; - - games_with_stats = 100; - // Repopulate table content - var table = "\n" + - " Version\n" + - " Status\n" + - " Game Duration\n" + - " Country\n" + - " Title\n" + - " Techtree\n" + - " Network players\n" + - " Network slots\n" + - " Total slots\n" + - " Map\n" + - " Tileset\n" + - " IPv4 address\n" + - " Game protocol port\n" + - " Platform\n" + - " Play date\n" + - "\n"; - - // Loop through all json objects - for(var i = 0; i < jsonText.length; i++) - { - // Check if version filter is active - if(version == '' || jsonText[i].glestVersion == version) - { - ////// DYNAMIC TABLE SECTION - - table += ""; - - /// Version - table += "" + escapeHtml(jsonText[i].glestVersion) + ""; - - /// Status - var statusCode = jsonText[i].status; - - // Change text if the server is full - if((statusCode == 0) && (jsonText[i].networkSlots <= jsonText[i].connectedClients)) - { - statusCode = 1; - } - var statusTitle, statusClass; - // Note that the json value is stored as a string, not a number - switch(statusCode) - { - case "0": - statusTitle = 'waiting for players'; - statusClass = 'waiting_for_players'; - break; - case "1": - statusTitle = 'game full, pending start'; - statusClass = 'game_full_pending_start'; - break; - case "2": - statusTitle = 'in progress'; - statusClass = 'in_progress'; - break; - case "3": - statusTitle = 'finished'; - statusClass = 'finished'; - break; - default: - statusTitle = 'unknown'; - statusClass = 'unknown'; - } - - //debugger; - if ((statusCode == "2" || statusCode == "3") && jsonText[i].gameUUID !== "") - { - var specialColHTML = "" + escapeHtml(statusTitle) + ""; - table += specialColHTML; - } - else - { - table += "" + escapeHtml(statusTitle) + ""; - } - - /// Game Duration - table += "" + escapeHtml(jsonText[i].gameDuration) + ""; - - /// Country - if(jsonText[i].country !== "") - { - var flagFile = "flags/" + jsonText[i].country.toLowerCase() + ".png"; - table += "\"""; - } - else - { - table += "Unknown"; - } - - /// Server title - table += "" + escapeHtml(jsonText[i].serverTitle) + ""; - - /// Tech - table += "" + escapeHtml(jsonText[i].tech) + ""; - - /// Connected clients - table += "" + escapeHtml(jsonText[i].connectedClients) + ""; - - /// Network slots - table += "" + escapeHtml(jsonText[i].networkSlots) + ""; - - /// Active slots - table += "" + escapeHtml(jsonText[i].activeSlots) + ""; - - /// Map - table += "" + escapeHtml(jsonText[i].map) + ""; - - /// Tileset - table += "" + escapeHtml(jsonText[i].tileset) + ""; - - /// IP - table += "" + escapeHtml(jsonText[i].ip) + ""; - - /// Port - table += "" + escapeHtml(jsonText[i].externalServerPort) + ""; - - /// Platform - table += "" + escapeHtml(jsonText[i].platform) + ""; - - /// Play date - table += "" + escapeHtml(jsonText[i].lasttime) + ""; - - table += ""; - - if ((statusCode == "2" || statusCode == "3") && jsonText[i].gameUUID !== "") - { - table += ""; - table += ""; - table += ""; - - games_with_stats++; - } - - ////// DESKTOP NOTIFICATIONS SECTION - - // Store data in an array keyed by the concatenation of the IP and port - var identifier = jsonText[i].ip + ":" + jsonText[i].externalServerPort; - newServerList[identifier] = { 'ip': jsonText[i].ip, 'port': jsonText[i].externalServerPort, 'title': jsonText[i].serverTitle, 'free': (jsonText[i].networkSlots - jsonText[i].connectedClients), 'version': jsonText[i].glestVersion, 'connectedClients': jsonText[i].connectedClients }; - - // Only check for changes if NOT the first time - if(!firstLoop) - { - if((newServerList[identifier].free > 0 && !serverList[identifier] && statusCode == 0 && (serverList[identifier] === undefined || !serverList[identifier].title.startsWith("Headless"))) || // doesn't exist in old list - (newServerList[identifier].free > 0 && serverList[identifier].connectedClients == 0 && newServerList[identifier].connectedClients > 0 && statusCode == 0 && (serverList[identifier] !== undefined && serverList[identifier].title.startsWith("Headless")))) // Headless server that previously had zero players - { - // Create notification - var notification = new Notification("Open server", { - iconUrl: 'images/game_icon.png', - body: 'Server "' + newServerList[identifier].title + '" has ' + newServerList[identifier].free + ' free slots available. Click to join now.', - }); - - notification.onclick = function() { window.location.assign('http://play.mg/?version=' + newServerList[identifier].version + '&mgg_host=' + newServerList[identifier].ip + '&mgg_port=' + newServerList[identifier].port); }; - } - } - else - { - firstLoop = false; - } - } - } - // Replace old list with new one - serverList = newServerList; - - // Write to actual table when done only, otherwise the browser trips as it tries to fix the partial table formatting - var tableDOM = document.getElementById("gamesTable"); - tableDOM.innerHTML = table; - - //debugger; - for(var gameIndex = 100; gameIndex < 200; ++gameIndex) { - setupGameStatsLink(gameIndex); - } - - // Catch empty case - if(jsonText.length === 0) - { - serverList = { }; - } - } - // Empty server list - else if(request.readyState === 4 && request.status === 0) - { - serverList = { }; - } - }; -} - - -// Default time in miliseconds between updates -var refreshTime = DEFAULT_REFRESH_TIME; - -// Check if there's an HTTP refresh query. If so, we need to overwrite it -if(get_data['refresh']) -{ - // Get the base URL without any GET parameters (because we have to remove the - // old refresh variable) - var redirectLocation = location.href.split("?")[0] + "?"; - - // If a version variable was specified, add that back in - if(get_data['version']) - { - redirectLocation += "version=" + get_data['version'] + "&"; - } - - // Finally the new refresh variable just for JS use - redirectLocation += "jsrefresh=" + get_data['refresh']; - - window.location.replace(redirectLocation); -} - -// Check if there's a js refresh query -if(get_data['jsrefresh']) -{ - // In seconds, so multiply by 1000 for miliseconds - refreshTime = parseInt(get_data['jsrefresh']) * 1000; -} - -// Initialize value in text field -var refreshTimeBox = document.getElementById("refreshTimeId"); -refreshTimeBox.value = refreshTime / 1000; - - -// Initiate interval -timedRequest(); -var interval = setInterval(timedRequest, refreshTime); - - -// Catch changes to the refresh time box -refreshTimeBox.onchange = function() -{ - // Validate if the input is a number - if(!isNaN(parseFloat(refreshTimeBox.value)) && isFinite(refreshTimeBox.value)) - { - if(refreshTimeBox.value < 10) - { - refreshTime = 10000; - refreshTimeBox.value = 10; - } - else if(refreshTimeBox.value > 999) - { - refreshTime = 999000; - refreshTimeBox.value = 999; - } - else - { - refreshTime = refreshTimeBox.value * 1000; - } - } - else - { - refreshTime = DEFAULT_REFRESH_TIME; - refreshTimeBox.value = 20; - } - - // Reset the interval - clearInterval(interval); - interval = setInterval(timedRequest, refreshTime); -}; \ No newline at end of file diff --git a/source/masterserver/scripts/json2.js b/source/masterserver/scripts/json2.js deleted file mode 100644 index d89ecc7a..00000000 --- a/source/masterserver/scripts/json2.js +++ /dev/null @@ -1,486 +0,0 @@ -/* - json2.js - 2013-05-26 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - See http://www.JSON.org/js.html - - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. - - - This file creates a global JSON object containing two methods: stringify - and parse. - - JSON.stringify(value, replacer, space) - value any JavaScript value, usually an object or array. - - replacer an optional parameter that determines how object - values are stringified for objects. It can be a - function or an array of strings. - - space an optional parameter that specifies the indentation - of nested structures. If it is omitted, the text will - be packed without extra whitespace. If it is a number, - it will specify the number of spaces to indent at each - level. If it is a string (such as '\t' or ' '), - it contains the characters used to indent at each level. - - This method produces a JSON text from a JavaScript value. - - When an object value is found, if the object contains a toJSON - method, its toJSON method will be called and the result will be - stringified. A toJSON method does not serialize: it returns the - value represented by the name/value pair that should be serialized, - or undefined if nothing should be serialized. The toJSON method - will be passed the key associated with the value, and this will be - bound to the value - - For example, this would serialize Dates as ISO strings. - - Date.prototype.toJSON = function (key) { - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - return this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z'; - }; - - You can provide an optional replacer method. It will be passed the - key and value of each member, with this bound to the containing - object. The value that is returned from your method will be - serialized. If your method returns undefined, then the member will - be excluded from the serialization. - - If the replacer parameter is an array of strings, then it will be - used to select the members to be serialized. It filters the results - such that only members with keys listed in the replacer array are - stringified. - - Values that do not have JSON representations, such as undefined or - functions, will not be serialized. Such values in objects will be - dropped; in arrays they will be replaced with null. You can use - a replacer function to replace those with JSON values. - JSON.stringify(undefined) returns undefined. - - The optional space parameter produces a stringification of the - value that is filled with line breaks and indentation to make it - easier to read. - - If the space parameter is a non-empty string, then that string will - be used for indentation. If the space parameter is a number, then - the indentation will be that many spaces. - - Example: - - text = JSON.stringify(['e', {pluribus: 'unum'}]); - // text is '["e",{"pluribus":"unum"}]' - - - text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - - text = JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; - }); - // text is '["Date(---current time---)"]' - - - JSON.parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = JSON.parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { - var d; - if (typeof value === 'string' && - value.slice(0, 5) === 'Date(' && - value.slice(-1) === ')') { - d = new Date(value.slice(5, -1)); - if (d) { - return d; - } - } - return value; - }); - - - This is a reference implementation. You are free to copy, modify, or - redistribute. -*/ - -/*jslint evil: true, regexp: true */ - -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -if (typeof JSON !== 'object') { - JSON = {}; -} - -(function () { - 'use strict'; - - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - if (typeof Date.prototype.toJSON !== 'function') { - - Date.prototype.toJSON = function () { - - return isFinite(this.valueOf()) - ? this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z' - : null; - }; - - String.prototype.toJSON = - Number.prototype.toJSON = - Boolean.prototype.toJSON = function () { - return this.valueOf(); - }; - } - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' - ? c - : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : '"' + string + '"'; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce 'null'. The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is 'object', we might be dealing with an object or an array or -// null. - - case 'object': - -// Due to a specification blunder in ECMAScript, typeof null is 'object', -// so watch out for that case. - - if (!value) { - return 'null'; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 - ? '[]' - : gap - ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' - : '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - if (typeof rep[i] === 'string') { - k = rep[i]; - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 - ? '{}' - : gap - ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' - : '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== 'function') { - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === 'string') { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - -// Make a fake root object containing our value under the key of ''. -// Return the result of stringifying the value. - - return str('', {'': value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof JSON.parse !== 'function') { - JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - text = String(text); - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { - return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with '()' and 'new' -// because they can cause invocation, and '=' because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we -// replace all simple value tokens with ']' characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or ']' or -// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - - if (/^[\],:{}\s]*$/ - .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') - .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') - .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The '{' operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval('(' + text + ')'); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return typeof reviver === 'function' - ? walk({'': j}, '') - : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError('JSON.parse'); - }; - } -}()); diff --git a/source/masterserver/scripts/utils.js b/source/masterserver/scripts/utils.js deleted file mode 100644 index 89a05e54..00000000 --- a/source/masterserver/scripts/utils.js +++ /dev/null @@ -1,56 +0,0 @@ -function asynchGet(url, target) { - //debugger; - //alert(target); - //document.getElementById(target).style.display='visible'; - document.getElementById(target).innerHTML = ' Fetching data...'; - if (window.XMLHttpRequest) { - req = new XMLHttpRequest(); - } else if (window.ActiveXObject) { - req = new ActiveXObject("Microsoft.XMLHTTP"); - } - if (req != undefined) { - req.onreadystatechange = function() {asynchDone(url, target);}; - req.open("GET", url, true); - req.send(""); - } -} - -function asynchDone(url, target) { - //debugger; - if (req.readyState == 4) { // only if req is "loaded" - if (req.status == 200) { // only if "OK" - document.getElementById(target).innerHTML = req.responseText; - } else { - document.getElementById(target).innerHTML=" MG Error:\n"+ req.status + "\n" +req.statusText; - } - } -} - -function setupGameStatsLink(gameIndex) { - if(document.getElementById('gameStats_' + gameIndex) ) { - var link = document.getElementById('gameStats_' + gameIndex); - link.onclick = function() { - var row = document.getElementById('content_row_' + this.getAttribute('gameuuid')); - //if(row && row.className == 'fullyhide') { - if(row) { - row.className = 'fullyshow'; - row.innerHTML = 'Hide Stats
'; - - var link2 = document.getElementById('hide_stats_' + this.getAttribute('gameuuid')); - link2.onclick = function() { - this.parentNode.parentNode.className = 'fullyhide'; - }; - - var div = document.getElementById('content_' + this.getAttribute('gameuuid')); - asynchGet('showGameStats.php?gameUUID=' + this.getAttribute('gameuuid'),div.id); - } - return false; - }; - } -} -//debugger; - -for(var gameIndex = 1; gameIndex < 200; ++gameIndex) { - setupGameStatsLink(gameIndex); -} - diff --git a/source/masterserver/showGameStats.php b/source/masterserver/showGameStats.php deleted file mode 100644 index 5cf31cd7..00000000 --- a/source/masterserver/showGameStats.php +++ /dev/null @@ -1,246 +0,0 @@ -Game Stats' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - - // get stats for a specific game - $gameUUID = ""; - if ( isset( $_GET['gameUUID'] ) ) - { - $gameUUID = (string) clean_str( $_GET['gameUUID'] ); - - //printf( "Game UUID = %s\n", htmlspecialchars( $gameUUID, ENT_QUOTES ), PHP_EOL ); - - define( 'DB_LINK', db_connect() ); - // consider replacing this by a cron job - cleanupServerList(); - - $whereClause = 'gameUUID=\'' . mysql_real_escape_string( $gameUUID ) . '\''; - - $stats_in_db = mysql_query( 'SELECT * FROM glestgamestats WHERE ' . $whereClause . ';'); - $all_stats = array(); - while ( $stats = mysql_fetch_array( $stats_in_db ) ) - { - array_push( $all_stats, $stats ); - } - unset( $stats_in_db ); - unset( $stats ); - - $player_stats_in_db = mysql_query( 'SELECT * FROM glestgameplayerstats WHERE ' . $whereClause . ' ORDER BY factionIndex;'); - $all_player_stats = array(); - while ( $player_stats = mysql_fetch_array( $player_stats_in_db ) ) - { - array_push( $all_player_stats, $player_stats ); - } - unset( $player_stats_in_db ); - unset( $player_stats ); - - db_disconnect( DB_LINK ); - unset( $linkid ); - - foreach( $all_stats as $stats ) - { - echo "\t\t\t" . '' . PHP_EOL; - - // Game Stats - $gameDuration = $stats['framesToCalculatePlaytime']; - $gameDuration = getTimeString($gameDuration); - - printf( "\t\t\t\t%s", htmlspecialchars( $gameDuration, ENT_QUOTES ), PHP_EOL ); - - printf( "\t\t\t\t%s", htmlspecialchars( $stats['maxConcurrentUnitCount'], ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $stats['totalEndGameConcurrentUnitCount'], ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $stats['isHeadlessServer'], ENT_QUOTES ), PHP_EOL ); - - echo "\t\t\t" . '' . PHP_EOL; - echo '
Game DurationMaximum Concurrent UnitsTotal Units at EndHeadless Server
%s%s%s%s
' . PHP_EOL; - - // Player stats for Game - - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - - $best_score = 0; - $best_score_enemyKillCount = 0; - $best_score_unitsProducedCount = 0; - $best_score_resourceHarvestedCount = 0; - foreach( $all_player_stats as $player_stats ) - { - if($best_score_enemyKillCount < $player_stats['enemyKillCount']) - { - $best_score_enemyKillCount = $player_stats['enemyKillCount']; - } - if($best_score_unitsProducedCount < $player_stats['unitsProducedCount']) - { - $best_score_unitsProducedCount = $player_stats['unitsProducedCount']; - } - if($best_score_resourceHarvestedCount < $player_stats['resourceHarvestedCount']) - { - $best_score_resourceHarvestedCount = $player_stats['resourceHarvestedCount']; - } - - $player_score = $player_stats['enemyKillCount'] * 100 + $player_stats['unitsProducedCount'] * 50 + $player_stats['resourceHarvestedCount'] / 10; - - if($best_score < $player_score) - { - $best_score = $player_score; - } - } - - foreach( $all_player_stats as $player_stats ) - { - echo "\t\t\t" . '' . PHP_EOL; - - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['factionIndex']+1, ENT_QUOTES ), PHP_EOL ); - - $controlType = $player_stats['controlType']; - switch ( $controlType ) - { - case 0: - $controlTypeTitle = "Closed"; - break; - case 1: - $controlTypeTitle = "CPU Easy"; - break; - case 2: - $controlTypeTitle = "CPU"; - break; - case 3: - $controlTypeTitle = "CPU Ultra"; - break; - case 4: - $controlTypeTitle = "CPU Mega"; - break; - case 5: - $controlTypeTitle = "Network Player"; - break; - case 6: - $controlTypeTitle = "Network Unassigned"; - break; - case 7: - $controlTypeTitle = "Human Host"; - break; - case 8: - $controlTypeTitle = "Network CPU Easy"; - break; - case 9: - $controlTypeTitle = "Network CPU"; - break; - case 10: - $controlTypeTitle = "Network CPU Ultra"; - break; - case 11: - $controlTypeTitle = "Network CPU Mega"; - break; - default: - $controlTypeTitle = 'unknown'; - } - - printf( "\t\t\t\t%s", htmlspecialchars( $controlTypeTitle, ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['playerName'], ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['platform'], ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", number_format(htmlspecialchars( $player_stats['resourceMultiplier'], ENT_QUOTES ),2), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['factionTypeName'], ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['teamIndex']+1, ENT_QUOTES ), PHP_EOL ); - - $wonGame_class = "player_loser"; - if($player_stats['wonGame']) - { - $wonGame_class = "player_winner"; - } - - printf( "\t\t\t\t%s", $wonGame_class, htmlspecialchars( ($player_stats['wonGame'] ? "yes" : "no"), ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['killCount'], ENT_QUOTES ), PHP_EOL ); - - $player_score_class = "player_losing_score"; - if($best_score_enemyKillCount == $player_stats['enemyKillCount']) - { - $player_score_class = "player_high_score"; - } - - printf( "\t\t\t\t%s", $player_score_class, htmlspecialchars( $player_stats['enemyKillCount'], ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['deathCount'], ENT_QUOTES ), PHP_EOL ); - - $player_score_class = "player_losing_score"; - if($best_score_unitsProducedCount == $player_stats['unitsProducedCount']) - { - $player_score_class = "player_high_score"; - } - - printf( "\t\t\t\t%s", $player_score_class, htmlspecialchars( $player_stats['unitsProducedCount'], ENT_QUOTES ), PHP_EOL ); - - $player_score_class = "player_losing_score"; - if($best_score_resourceHarvestedCount == $player_stats['resourceHarvestedCount']) - { - $player_score_class = "player_high_score"; - } - - printf( "\t\t\t\t%s", $player_score_class, htmlspecialchars( $player_stats['resourceHarvestedCount'], ENT_QUOTES ), PHP_EOL ); - - $player_score = $player_stats['enemyKillCount'] * 100 + $player_stats['unitsProducedCount'] * 50 + $player_stats['resourceHarvestedCount'] / 10; - $player_score_class = "player_losing_score"; - if($player_score == $best_score) - { - $player_score_class = "player_high_score"; - } - - printf( "\t\t\t\t%s", $player_score_class, number_format(htmlspecialchars( $player_score, ENT_QUOTES ),0), PHP_EOL ); - - printf( "\t\t\t\t%s", htmlspecialchars( ($player_stats['quitBeforeGameEnd'] ? "yes" : "no"), ENT_QUOTES ), PHP_EOL ); - - $quitTime = $player_stats['quitTime']; - $quitTime = getTimeString($quitTime); - - printf( "\t\t\t\t%s", htmlspecialchars( $quitTime, ENT_QUOTES ), PHP_EOL ); - - echo "\t\t\t" . '' . PHP_EOL; - } - - unset( $all_player_stats ); - unset( $player_stats ); - } - - unset( $all_stats ); - unset( $stats ); - } - - echo '
Player #Player TypePlayer NamePlatformResource MultiplierFaction TypeTeamWinnerKillsEnemy KillsDeathsUnits ProducedResources HarvestedScoreQuit Before Game EndedQuit Time
%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s
' . PHP_EOL; - - //echo '

' . PHP_EOL; - //echo '
' . PHP_EOL; - //echo '

' . PHP_EOL; -?> diff --git a/source/masterserver/showMapsForGlest.php b/source/masterserver/showMapsForGlest.php deleted file mode 100644 index e8eb1586..00000000 --- a/source/masterserver/showMapsForGlest.php +++ /dev/null @@ -1,65 +0,0 @@ -=")) { - $addItem = true; - } - } - else if (version_compare($glestVersion,$itemVersion,">=")) { - $addItem = true; - } - - if ( $addItem == true ) { - if ( isset( $_GET['version'] ) ) { $mgversion = $_GET["version"]; } else { $mgversion = ''; } - if($mgversion == '') - { - $outString = - "${map['mapname']}|${map['playercount']}|${map['crc']}|${map['description']}|${map['url']}|${map['imageUrl']}|"; - } - else { - $outString = - "${map['mapname']}|${map['playercount']}|${map['crcnew']}|${map['description']}|${map['url']}|${map['imageUrl']}|"; - } - $outString = $outString . "\n"; - - echo ($outString); - } - } - unset( $all_maps ); - unset( $map ); -?> - diff --git a/source/masterserver/showPlayers.php b/source/masterserver/showPlayers.php deleted file mode 100644 index deaa6326..00000000 --- a/source/masterserver/showPlayers.php +++ /dev/null @@ -1,118 +0,0 @@ -= DATE_SUB(NOW(), INTERVAL 1 DAY) "; - } - else if( $period == "week") { - $timelimit = " and s.lasttime >= DATE_SUB(NOW(), INTERVAL 1 WEEK) "; - } - else if( $period == "month") { - $timelimit = " and s.lasttime >= DATE_SUB(NOW(), INTERVAL 1 MONTH) "; - } - - $players_in_db = mysql_query( 'select playername, count(*) as c, SEC_TO_TIME(sum(ggs.framesToCalculatePlaytime)/30) as playtime from glestgameplayerstats s , glestgamestats ggs where s.gameUUID=ggs.gameUUID and controltype>4 '.$timelimit.' group by playername having c >1 order by c desc,playername LIMIT 100' ); - $all_players = array(); - while ( $players = mysql_fetch_array( $players_in_db ) ) - { - array_push( $all_players, $players ); - } - unset( $players_in_db ); - unset( $players ); - - db_disconnect( DB_LINK ); - unset( $linkid ); - - // Representation starts here - header( 'Content-Type: text/html; charset=utf-8' ); - - echo '' . PHP_EOL; - echo '' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . htmlspecialchars( PRODUCT_NAME ) . ' top 100 players' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo '

' . htmlspecialchars( PRODUCT_NAME ) . ' Top 100 Players

' . PHP_EOL; - - if( $period == "day") { - echo ' ' . PHP_EOL; - } - echo ' ' . htmlspecialchars( 'day' ) . ' ' . PHP_EOL; - if( $period == "day") { - echo '' . PHP_EOL; - } - - if( $period == "week") { - echo ' ' . PHP_EOL; - } - echo ' ' . htmlspecialchars( 'week' ) . ' ' . PHP_EOL; - if( $period == "week") { - echo '' . PHP_EOL; - } - - if( $period == "month") { - echo ' ' . PHP_EOL; - } - echo ' ' . htmlspecialchars( 'month' ) . ' ' . PHP_EOL; - if( $period == "month") { - echo '' . PHP_EOL; - } - - if( $period == "") { - echo ' ' . PHP_EOL; - } - echo ' ' . htmlspecialchars( 'all time' ) . ' ' . PHP_EOL; - if( $period == "") { - echo '' . PHP_EOL; - } - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - - $position = 0; - foreach( $all_players as $player ) - { - $position +=1; - echo "\t\t\t" . '' . PHP_EOL; - // # - printf( "\t\t\t\t%s", htmlspecialchars( $position, ENT_QUOTES ), PHP_EOL ); - // playername - printf( "\t\t\t\t%s", htmlspecialchars( $player['playername'], ENT_QUOTES ), PHP_EOL ); - // # of games games - printf( "\t\t\t\t%s", htmlspecialchars( $player['c'], ENT_QUOTES ), PHP_EOL ); - // # of games games - printf( "\t\t\t\t%s", htmlspecialchars( $player['playtime'], ENT_QUOTES ), PHP_EOL ); - echo "\t\t\t" . '' . PHP_EOL; - } - echo '
'.htmlspecialchars('#').'Player NameGames PlayedTotal Time Played
%s%s%s%s
' . PHP_EOL; - - //echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo '' . PHP_EOL; - - unset( $all_players ); - unset( $player ); -?> diff --git a/source/masterserver/showRecentServers.php b/source/masterserver/showRecentServers.php deleted file mode 100644 index a18b652a..00000000 --- a/source/masterserver/showRecentServers.php +++ /dev/null @@ -1,20 +0,0 @@ -"; - while($recent_server = mysql_fetch_assoc($recents_query)) { - echo "{$recent_server['name']}{$recent_server['players']}"; - } - echo ""; - - db_disconnect($link); -?> diff --git a/source/masterserver/showScenariosForGlest.php b/source/masterserver/showScenariosForGlest.php deleted file mode 100644 index 2ab97e6d..00000000 --- a/source/masterserver/showScenariosForGlest.php +++ /dev/null @@ -1,66 +0,0 @@ -=")) { - $addItem = true; - } - } - else if (version_compare($glestVersion,$itemVersion,">=")) { - $addItem = true; - } - - if($addItem == true) { - if ( isset( $_GET['version'] ) ) { $mgversion = $_GET['version']; } else { $mgversion = ''; }; - if($mgversion == '') - { - $outString = - "${scenario['scenarioname']}|${scenario['crc']}|${scenario['description']}|${scenario['url']}|${scenario['imageUrl']}|"; - } - else { - $outString = - "${scenario['scenarioname']}|${scenario['crcnew']}|${scenario['description']}|${scenario['url']}|${scenario['imageUrl']}|"; - } - $outString = $outString . "\n"; - - echo ($outString); - } - } - unset( $all_scenarios ); - unset( $scenario ); -?> - diff --git a/source/masterserver/showServers.php b/source/masterserver/showServers.php deleted file mode 100644 index 7c712800..00000000 --- a/source/masterserver/showServers.php +++ /dev/null @@ -1,230 +0,0 @@ - 3 OR (status = 3 AND a.lasttime > DATE_add(NOW(), INTERVAL - ' . MAX_HOURS_OLD_GAMES . ' hour)) ORDER BY status, a.lasttime DESC, connectedClients > 0 DESC, (networkSlots - connectedClients) , ip DESC;' ); - $all_servers = array(); - while ( $server = mysql_fetch_array( $servers_in_db ) ) - { - array_push( $all_servers, $server ); - } - unset( $servers_in_db ); - unset( $server ); - - db_disconnect( DB_LINK ); - unset( $linkid ); - - // Representation starts here - header( 'Content-Type: text/html; charset=utf-8' ); - if ( REFRESH_INTERVAL != 0 ) { - if ( REFRESH_INTERVAL <= 10 ) { - header( 'Refresh: 10' ); - } else { - header( 'Refresh: ' . REFRESH_INTERVAL ); - } - } - echo '' . PHP_EOL; - echo '' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . htmlspecialchars( PRODUCT_NAME ) . ' gameservers' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo '

' . htmlspecialchars( PRODUCT_NAME ) . ' gameservers

' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - - $games_with_stats = 0; - foreach( $all_servers as $server ) - { - # Filter by version if requested - if ( FILTER_VERSION == $server['glestVersion'] or FILTER_VERSION == '' ) - { - echo "\t\t\t" . '' . PHP_EOL; - - // glestVersion - printf( "\t\t\t\t%s", htmlspecialchars( $server['glestVersion'], ENT_QUOTES ), htmlspecialchars( $server['glestVersion'], ENT_QUOTES ), PHP_EOL ); - - // status - $status_code = $server['status']; - if ( $status_code == 0) - { - $gameFull = ( $server['networkSlots'] <= $server['connectedClients'] ); - if ( $gameFull == true ) - { - $status_code = 1; - } - } - switch ( $status_code ) - { - case 0: - $status_title = 'waiting for players'; - $status_class = 'waiting_for_players'; - break; - case 1: - $status_title = 'game full, pending start'; - $status_class = 'game_full_pending_start'; - break; - case 2: - $status_title = 'in progress'; - $status_class = 'in_progress'; - break; - case 3: - $status_title = 'finished'; - $status_class = 'finished'; - break; - default: - $status_title = 'unknown'; - $status_class = 'unknown'; - } - - if (($status_code == 2 || $status_code == 3) && $server['gameUUID'] != "") - { - $games_with_stats++; - printf( "\t\t\t\t%s", PHP_EOL ); - } - else - { - printf( "\t\t\t\t%s", $server['status'], $status_class, htmlspecialchars( $status_title, ENT_QUOTES ), PHP_EOL ); - } - - // Game Stats - $gameDuration = $server['framesToCalculatePlaytime']; - $gameDuration = getTimeString($gameDuration); - printf( "\t\t\t\t%s", htmlspecialchars( $gameDuration, ENT_QUOTES ), PHP_EOL ); - - // country - if ( $server['country'] !== '' ) { - $flagfile = 'flags/' . strtolower( $server['country'] ).'.png'; - if ( file_exists( $flagfile ) ) { - printf( "\t\t\t\t%s", $flagfile, $server['country'], $server['country'], PHP_EOL ); - } else { - printf( "\t\t\t\t%s", htmlspecialchars( $server['country'], ENT_QUOTES ), PHP_EOL ); - } - } - else { - printf( "\t\t\t\t%s", PHP_EOL ); - } - - // serverTitle - printf( "\t\t\t\t%s", htmlspecialchars( $server['serverTitle'], ENT_QUOTES ), PHP_EOL ); - - // tech - printf( "\t\t\t\t%s", htmlspecialchars( $server['tech'], ENT_QUOTES ), PHP_EOL ); - - // connectedClients - printf( "\t\t\t\t%s", htmlspecialchars( $server['connectedClients'], ENT_QUOTES ), PHP_EOL ); - - // networkSlots - printf( "\t\t\t\t%s", htmlspecialchars( $server['networkSlots'], ENT_QUOTES ), PHP_EOL ); - - // activeSlots - printf( "\t\t\t\t%s", htmlspecialchars( $server['activeSlots'], ENT_QUOTES ), PHP_EOL ); - - // map - printf( "\t\t\t\t%s", htmlspecialchars( $server['map'], ENT_QUOTES ), PHP_EOL ); - - // tileset - printf( "\t\t\t\t%s", htmlspecialchars( $server['tileset'], ENT_QUOTES ), PHP_EOL ); - - // ip - printf( "\t\t\t\t%s", htmlspecialchars( $server['ip'], ENT_QUOTES ), PHP_EOL ); - - // externalServerPort - printf( "\t\t\t\t%s", htmlspecialchars( $server['externalServerPort'], ENT_QUOTES ), PHP_EOL ); - - // platform - printf( "\t\t\t\t%s", htmlspecialchars( $server['platform'], ENT_QUOTES ), PHP_EOL ); - - // game play time - printf( "\t\t\t\t%s", htmlspecialchars( $server['lasttime'], ENT_QUOTES ), PHP_EOL ); - - echo "\t\t\t" . '' . PHP_EOL; - - if (($status_code == 2 || $status_code == 3) && $server['gameUUID'] != "") - { - //echo "\t\t\t" . '' . PHP_EOL; - printf( "\t\t\t\t%s", $server['gameUUID'], PHP_EOL ); - printf( "%s", PHP_EOL ); - echo "\t\t\t" . '' . PHP_EOL; - } - } - } - - echo '
VersionStatusGame DurationCountryTitleTechtreeNetwork playersNetwork slotsTotal slotsMapTilesetIPv4 addressGame protocol portPlatformPlay date
%s%s", $server['status'], $status_class, $games_with_stats, $server['gameUUID'], htmlspecialchars( $status_title, ENT_QUOTES ) ); - printf( "%s%s\"%s%sunknown%s%s%s%s%s%s%s%s%s%s%s
' . PHP_EOL; - - echo '

' . PHP_EOL; - echo '
' . PHP_EOL; - echo '

' . PHP_EOL; - - echo ' ' . PHP_EOL; - - if ( FILTER_VERSION != '' ) - { - echo "\t\t

Filters active:

" . PHP_EOL; - echo "\t\t
    " . PHP_EOL; - printf( "\t\t\t
  • Version %s
  • %s", htmlspecialchars( FILTER_VERSION, ENT_QUOTES ), PHP_EOL ); - echo "\t\t
" . PHP_EOL; - } - - echo '

Usage:

' . PHP_EOL; - echo '
    ' . PHP_EOL; - echo '
  • You can have this page auto refresh every 60 seconds by appending ?refresh=60 to the URL. Minimum refresh time is 10 seconds.
  • ' . PHP_EOL; - echo '
  • The parameters used by the masterserver API will display when you move your mouse pointer over any of the table headings.
  • ' . PHP_EOL; - echo '
' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; - echo '' . PHP_EOL; - - unset( $all_servers ); - unset( $server ); -?> diff --git a/source/masterserver/showServersForGlest.php b/source/masterserver/showServersForGlest.php deleted file mode 100644 index 3c3bab9b..00000000 --- a/source/masterserver/showServersForGlest.php +++ /dev/null @@ -1,58 +0,0 @@ - 3 ORDER BY status, connectedClients > 0 DESC, (networkSlots - connectedClients) , ip DESC;' ); - $all_servers = array(); - while ( $server = mysql_fetch_array( $servers_in_db ) ) - { - array_push( $all_servers, $server ); - } - unset( $servers_in_db ); - unset( $server ); - - db_disconnect( DB_LINK ); - - // Representation starts here - header( 'Content-Type: text/plain; charset=utf-8' ); - foreach( $all_servers as &$server ) - { - $outString = - "${server['glestVersion']}|${server['platform']}|${server['binaryCompileDate']}|${server['serverTitle']}|${server['ip']}|${server['tech']}|${server['map']}|${server['tileset']}|${server['activeSlots']}|${server['networkSlots']}|${server['connectedClients']}|${server['externalServerPort']}|"; - - if ( $server['country'] !== '' ) - { - $outString = $outString . "${server['country']}|"; - } - else - { - $outString = $outString . DEFAULT_COUNTRY . "|"; - } - - $calculatedStatus = $server['status']; - if($calculatedStatus == 0) - { - $gameFull = ($server['networkSlots'] <= $server['connectedClients']); - if($gameFull == true) - { - $outString = $outString . "1|"; - } - } - $outString = $outString . "$calculatedStatus|\n"; - - echo ($outString); - } - unset( $all_servers ); - unset( $server ); -?> - diff --git a/source/masterserver/showServersJson.php b/source/masterserver/showServersJson.php deleted file mode 100644 index cafd5a5c..00000000 --- a/source/masterserver/showServersJson.php +++ /dev/null @@ -1,36 +0,0 @@ - 3 OR (status = 3 AND a.lasttime > DATE_add(NOW(), INTERVAL - ' . MAX_HOURS_OLD_GAMES . ' hour)) ORDER BY status, a.lasttime DESC, connectedClients > 0 DESC, (networkSlots - connectedClients), ip DESC;' ); - $all_servers = array(); - while ( $server = mysql_fetch_array( $servers_in_db ) ) - { - // Game Stats - $rowIndex = count($all_servers); - $gameDuration = $server["framesToCalculatePlaytime"]; - $server["gameDuration"] = getTimeString($gameDuration); - - array_push( $all_servers, $server ); - - } - unset( $servers_in_db ); - unset( $server ); - - db_disconnect( DB_LINK ); - unset( $linkid ); - - header('Content-type: application/json'); - echo json_encode($all_servers); - unset( $all_servers ); -?> diff --git a/source/masterserver/showTechsForGlest.php b/source/masterserver/showTechsForGlest.php deleted file mode 100644 index a2f899e1..00000000 --- a/source/masterserver/showTechsForGlest.php +++ /dev/null @@ -1,65 +0,0 @@ -=")) { - $addItem = true; - } - } - else if (version_compare($glestVersion,$itemVersion,">=")) { - $addItem = true; - } - - if($addItem == true) { - if ( isset( $_GET['version'] )) { $mgversion = $_GET['version']; } else { $mgversion = ''; }; - if($mgversion == '') - { - $outString = - "${tech['techname']}|${tech['factioncount']}|${tech['crc']}|${tech['description']}|${tech['url']}|${tech['imageUrl']}|"; - } - else { - $outString = - "${tech['techname']}|${tech['factioncount']}|${tech['crcnew']}|${tech['description']}|${tech['url']}|${tech['imageUrl']}|"; - } - $outString = $outString . "\n"; - - echo ($outString); - } - } - unset( $all_techs ); - unset( $tech ); -?> - diff --git a/source/masterserver/showTilesetsForGlest.php b/source/masterserver/showTilesetsForGlest.php deleted file mode 100644 index 55f24413..00000000 --- a/source/masterserver/showTilesetsForGlest.php +++ /dev/null @@ -1,65 +0,0 @@ -=")) { - $addItem = true; - } - } - else if (version_compare($glestVersion,$itemVersion,">=")) { - $addItem = true; - } - - if($addItem == true) { - if ( isset( $_GET['version'] ) ) { $mgversion = $_GET['version']; } else { $mgversion = ''; } - if($mgversion == '') - { - $outString = - "${tileset['tilesetname']}|${tileset['crc']}|${tileset['description']}|${tileset['url']}|${tileset['imageUrl']}|"; - } - else { - $outString = - "${tileset['tilesetname']}|${tileset['crcnew']}|${tileset['description']}|${tileset['url']}|${tileset['imageUrl']}|"; - } - $outString = $outString . "\n"; - - echo ($outString); - } - } - unset( $all_tilesets ); - unset( $tileset ); -?> - diff --git a/source/masterserver/style/screen.css b/source/masterserver/style/screen.css deleted file mode 100644 index 9b9cead1..00000000 --- a/source/masterserver/style/screen.css +++ /dev/null @@ -1,66 +0,0 @@ -/* - ============================================================== - Copyright: (C) 2012 Mark Vejvoda, Titus Tscharntke and Tom Reynolds - The Megaglest Team, under GNU GPL v3.0 - ============================================================== -*/ - -body { - font-family: sans-serif; -} - -h1 { - text-align: center; -} - -table { - width: 100%; - border: 2px solid black; -} - -th, td { - border: 1px solid black; - padding: 5px; - text-align: center; - text-transform: capitalize; -} - -th { - background-color: LightGray; -} - -.waiting_for_players { - background-color: LightGreen; -} - -.game_full_pending_start { - background-color: Yellow; -} - -.in_progress { - background-color: Tomato; -} - -.finished { - background-color: Gray; -} - -.unknown { - background-color: Red; -} - -.player_high_score { - background-color: LightGreen; -} -.player_losing_score { - background-color: Yellow; -} -.player_winner { - background-color: LightGreen; -} -.player_loser { - background-color: Red; -} - -.fullyhide { display: none } -.fullyshow { display: }