<?php set_magic_quotes_runtime(false); include("config.inc"); include("as_log.inc"); function redirect() { ?> <html> <head> <title>LegacyWorlds Beta 5 > Administration > Game status</title> </head> <body> <h1><a href="index.html">LWB5 > Administration</a> > Game status</h1> <h2>Operation in progress...</h2> <p> A system operation is in progress. Please wait, the page will update in 5 seconds. </p> <script language="JavaScript"> window.setTimeout('window.location="game_status.php"', 5000); </script> </body> </html> <?php exit(0); } function printStatus($status) { static $styles = array( "PRE" => array('yellow', 'red'), "READY" => array('red', 'yellow'), "RUNNING" => array('white', 'green'), "VICTORY" => array('yellow', 'blue'), "ENDING" => array('black', 'yellow'), "FINISHED" => array("white", "black") ); print "<th style='color:" . $styles[$status][0] . ";background-color:" . $styles[$status][1] . "'>$status</th>"; } function sendFifo($command) { global $aConfig; $fName = $aConfig['ctrlFifo']; if (!file_exists($fName)) { return false; } $fifo = fopen($fName, "w"); fwrite($fifo, "$command\n"); fclose($fifo); redirect(); } function handleCommand($command, $game) { if ($command == 'mv' && $game->status() == 'PRE') { __logAdmin("is making game {$game->name} visible"); sendFifo("READY {$game->name}"); } elseif ($command == 'te' && $game->status() == 'READY' && $game->firstTick() - time() > 24 * 60 * 60 + 30) { __logAdmin("made game {$game->name} start 24h earlier"); sendFifo("START {$game->name} EARLY"); } elseif ($command == 'tl' && $game->status() == 'READY') { __logAdmin("made game {$game->name} start 24h later"); sendFifo("START {$game->name} LATE"); } elseif ($command == 'en' && ($game->status() == 'RUNNING' || $game->status() == "VICTORY")) { __logAdmin("terminated game {$game->name}"); sendFifo("SETEND {$game->name} 0"); } elseif ($command == 'e24' && $game->status() == 'RUNNING') { __logAdmin("set game {$game->name} to end in 24h"); sendFifo("SETEND {$game->name} 24"); } elseif ($command == 'kr' && $game->status() == 'ENDING') { __logAdmin("prevented game {$game->name} from ending"); sendFifo("NOEND {$game->name}"); } elseif ($command == 'ee' && $game->status() == 'ENDING' && $game->lastTick() - time() > 24 * 60 * 60 + 30) { __logAdmin("made game {$game->name} end 24h earlier"); sendFifo("END {$game->name} EARLY"); } elseif ($command == 'el' && $game->status() == 'ENDING') { __logAdmin("made game {$game->name} end 24h later"); sendFifo("END {$game->name} LATE"); } elseif ($command == 'en' && $game->status() == 'ENDING') { __logAdmin("terminated game {$game->name}"); sendFifo("END {$game->name} NOW"); } } // Load the list of games $oldDir = getcwd(); chdir("../scripts"); $__logPrefix = "lwControl"; $__loader = array( 'log', 'classloader', 'version', 'game', 'tick', 'config', 'db_connection', 'db_accessor', 'db', 'library' ); require_once("loader.inc"); chdir($oldDir); $games = config::getGames(); dbConnect(); // Handle commands if ($_GET['c'] != '') { $cGame = $_GET['g']; if (array_key_exists($cGame, $games) && $cGame != 'main') { handleCommand($_GET['c'], $games[$cGame]); } } ?> <html> <head> <title>LegacyWorlds Beta 5 > Administration > Game status</title> </head> <body> <h1><a href="index.html">LWB5 > Administration</a> > Game status</h1> <h2>Game list</h2> <p> <b>WARNING:</b> make sure you know what you're doing here - there are no second chances on this page; if you click something, that "something" <i>will</i> happen <i>at once</i>. </p> <table border="1" width="100%"> <tr> <th style="text-align:left; width:10%">ID</th> <th style="width:10%">Status</th> <th style="text-align:left;width:20%">Name</th> <th style="text-align:left">Ticks</th> <th style="text-align:left;width:30%">Commands</th> </tr> <?php foreach ($games as $name => $game) { if ($name == 'main') { continue; } $status = $game->status(); $firstTick = $game->firstTick(); $lastTick = $game->lastTick(); print " <tr>\n <td><b>$name</b></td>\n"; printStatus($status); print " <td>" . htmlentities($game->text) . "</td>\n"; print " <td>"; if ($firstTick > time()) { print "Starting at " . gmstrftime('%H:%M:%S on %Y-%m-%d', $firstTick); } elseif ($lastTick == 0) { print "Running since " . gmstrftime('%H:%M:%S on %Y-%m-%d', $firstTick); } elseif ($lastTick > time()) { print "Running until " . gmstrftime('%H:%M:%S on %Y-%m-%d', $lastTick); } else { print "Stopped since " . gmstrftime('%H:%M:%S on %Y-%m-%d', $lastTick); } if ($status == 'PRE') { $cmd = array( array('mv', 'Make visible') ); } elseif ($status == 'READY') { $cmd = array( array('tl', 'Start 24h later') ); if ($firstTick - time() > 24 * 60 * 60 + 30) { array_push($cmd, array('te', 'Start 24h earlier')); } } elseif ($status == 'RUNNING') { $cmd = array( array('e24', 'End in 24h'), array('en', 'End now') ); } elseif ($status == 'VICTORY') { $cmd = array( array('en', 'End game') ); } elseif ($status == 'ENDING') { $cmd = array( array('el', 'Postpone by 24h') ); if ($lastTick - time() > 24 * 60 * 60 + 30) { array_push($cmd, array('ee', 'End 24h earlier')); } array_push($cmd, array('en', 'End now')); array_push($cmd, array('kr', 'Keep running')); } else { $cmd = array(); } print "</td>\n <td>"; if (count($cmd)) { $lk = array(); foreach ($cmd as $c) { array_push($lk, "<a href='?c=" . $c[0] . "&g=$name' onclick=\"return confirm('You selected \\'" . $c[1] . "\\' on game \\'$name\\'. Please confirm.');\">" . $c[1] . "</a>"); } print join(' - ', $lk); } else { print " "; } print "</td>\n </tr>\n"; } ?> </table> <h3>About game status</h3> <p>Games can have the following status:</p> <table> <tr> <?printStatus('PRE');?> <td>The game is configured, but is hidden for now</td> </tr> <tr> <?printStatus('READY');?> <td>The game is visible, but ticks have not started</td> </tr> <tr> <?printStatus('RUNNING');?> <td>The game is running normally</td> </tr> <tr> <?printStatus('VICTORY');?> <td>The game is still running but someone reached victory</td> </tr> <tr> <?printStatus('ENDING');?> <td>The game is still available but is about to end.</td> </tr> <tr> <?printStatus('FINISHED');?> <td>The game is no longer running and only visible through the rankings page</td> </tr> </table> </body> </html>