Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] GameQ3 jak posortować serwery ?
Forum PHP.pl > Forum > Przedszkole
sewek
Witam.
Nie zbyt wiem jak to napisać, ale
Jak posortować serwery według ilości graczy. Dane są pobierane z mysql do gameq3 i później wyświetlane.

Status:
  1. $serwer_data = mysql_query("SELECT * FROM `serwers`");
  2. echo '<table class="s" style="width: 80%">';
  3. echo '<tr><td><b>Gra</b></td><td><b>Nazwa</b></td><td><b>IP</b></td><td><b>Mapa</b></td><td><b>Sloty</b></td><td><b>OS</b></td><td><b>Połącz</b></td></tr>';
  4.  
  5. include dirname(dirname(__FILE__)). '/status/gameq3/gameq3.php';
  6.  
  7. while ($serwer = mysql_fetch_array($serwer_data)) {
  8.  
  9. $gq = new \GameQ3\GameQ3();
  10.  
  11. $gq->setFilter('colorize', array(
  12. 'format' => 'strip'
  13. ));
  14.  
  15. $gq->setFilter('sortplayers', array(
  16. 'sortkeys' => array(
  17. array('key' => 'is_bot', 'order' => 'asc'),
  18. array('key' => 'score', 'order' => 'desc'),
  19. array('key' => 'name', 'order' => 'asc'),
  20. )
  21. ));
  22.  
  23. $gq->setFilter('strip_badchars');
  24.  
  25. $gq->setOption('curl_connect_timeout', 1000);
  26. $gq->setOption('curl_total_timeout', 1200);
  27. $gq->setOption('curl_select_timeout', 1500);
  28.  
  29. //$gq->setLogLevel(true, true, true, true);
  30. $serwerip = explode(":", $serwer['ip']);
  31.  
  32. $server = array(
  33. 'id' => 'gs',
  34. 'type' => $serwer['game'],
  35. 'connect_addr' => $serwerip[0],
  36. 'connect_port' => $serwerip[1],
  37. );
  38.  
  39. try {
  40. $gq->addServer($server);
  41. } catch(\GameQ3\UserException $e) {
  42. die('GameQ 3 Error: '.$e->getMessage());
  43. }
  44.  
  45. $results = $gq->requestAllData();
  46.  
  47. if($results['gs']['info']['online']){
  48. <tr>
  49. <td><img src="'.domain().'status/images/'.$serwer['game'].'.png" style="border: 0" alt="" /></td>
  50. <td>'.$results['gs']['general']['hostname'].'</td>
  51. <td>'.$serwer['ip'].'</td>
  52. <td>'.$results['gs']['general']['map'].'</td>
  53. <td>'.$results['gs']['general']['num_players'].'/'.$results['gs']['general']['max_players'].'</td>
  54. <td>'.$results['gs']['settings'][3][1].'</td>
  55. <td><a href="steam://connect/'.$serwer['ip'].'"><img src="'.domain().'status/images/steam.png" style="border: 0" alt="" /></a><a href="http://serwery.game-status.xaa.pl/index.php?ip='.$serwer['ip'].'"><img src="'.domain().'status/images/gs.png" style="border: 0" alt="" /></a></td>
  56. </tr>
  57. ';
  58. }
  59. }
  60.  
  61. echo '</table>';
b4rt3kk
Prawdopodobnie najlepiej by było zrobić to w zapytaniu:

  1. $serwer_data = mysql_query("SELECT * FROM `serwers`");


Czyli:

  1. $serwer_data = mysql_query("SELECT * FROM `serwers` ORDER BY nazwa_kolumny DESC");


Nie znam nazwy kolumny, w której przechowywana jest liczba graczy, więc podałem przykładową.
Aqu
W zapytaniu tego nie zrobi, bo w bazie nie ma informacji o liczbie graczy, pobiera to dopiero z serwera.
Musisz wyrzucic z tej pętli echo i tylko dodawać do tablicy, dane pobrane z serwera:
  1. while ($serwer = mysql_fetch_array($serwer_data)) {
  2.  
  3. $serwerAllInfo['sql'] = $sql;
  4. ...
  5. $serwerAllInfo['gameq'] = $results['gs']['info']);
  6.  


Potem posorotwać to za pomocą http://php.net/manual/en/function.usort.php i wyświetić w pętli foreach.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.