Exemple #1
0
 /**
  * @return array
  */
 public static function getBest()
 {
     $result = MatchPlayer::selectRaw('player_id, COUNT(*) as appearances , AVG(vote) avg, SUM(goals) goals')->where('goals', '>', 0)->orderByRaw('SUM(goals) DESC,COUNT(*) DESC')->groupBy('player_id')->take(self::PLAYER_STATS_LIMIT)->get()->keyBy('player_id')->toArray();
     $players = Player::with('team')->whereIn('id', array_keys($result))->get()->toArray();
     $result = array_map(function ($player) use($result) {
         return array_merge($player, $result[$player['id']]);
     }, $players);
     return $result;
 }
 public function parse($jsonString)
 {
     $event = json_decode($jsonString);
     if (!is_object($event)) {
         throw new Exception("Could not create a JSON object from '" . $jsonString . "'");
     }
     /**
      * Server
      */
     if (isset($event->server) && isset($event->server->name) && isset($event->server->port)) {
         $server = Database::getServer($event->server->name, gethostbyname($_SERVER['REMOTE_ADDR']), $event->server->port);
     } else {
         throw new Exception("No server found from JSON!");
     }
     /**
      * Player
      */
     if (isset($event->player, $event->player->name, $event->player->ip, $event->player->skill)) {
         $player = Database::getPlayer($event->player->name, $event->player->ip, $event->player->skill);
     }
     if (false) {
         /**
          * Connect event
          */
     } else {
         if ($event->type == "connect" && $server && $player) {
             $connectEvent = new ConnectEvent();
             $connectEvent->setPlayer($player);
             $connectEvent->setServer($server);
             $connectEvent->insert();
             if (Config::$debug) {
                 echo "type[{$event->type}], {$server}, {$player}\n";
             }
             /**
              * Name change event
              */
         } else {
             if ($event->type == "namechange" && $server && $player) {
                 $nameChangeEvent = new NameChangeEvent();
                 $nameChangeEvent->setPlayer($player);
                 $nameChangeEvent->setServer($server);
                 $nameChangeEvent->setOldName($event->oldName);
                 $nameChangeEvent->setNewName($event->newName);
                 $nameChangeEvent->insert();
                 if (Config::$debug) {
                     echo "type[{$event->type}], {$server}, {$player}, {$event->oldName} -> {$event->newName}\n";
                 }
                 /**
                  * Disconnect event
                  */
             } else {
                 if ($event->type == "disconnect" && $server && $player && isset($event->connectionTime)) {
                     $disconnectEvent = new DisconnectEvent();
                     $disconnectEvent->setPlayer($player);
                     $disconnectEvent->setServer($server);
                     $disconnectEvent->setConnectionTime($event->connectionTime);
                     $disconnectEvent->insert();
                     if (Config::$debug) {
                         echo "type[{$event->type}], {$server}, {$player}, connectionTime[{$disconnectEvent->getConnectionTime()}]\n";
                     }
                     /**
                      * Kick event
                      */
                 } else {
                     if ($event->type == "kick" && $server && $player && isset($event->target, $event->target->name, $event->target->ip, $event->target->skill)) {
                         $target = Database::getPlayer($event->target->name, $event->target->ip, $event->target->skill);
                         $kickEvent = new KickEvent();
                         $kickEvent->setServer($server);
                         $kickEvent->setPlayer($player);
                         $kickEvent->setTarget($target);
                         $kickEvent->insert();
                         if (Config::$debug) {
                             echo "type[{$event->type}], {$server}, kicker {$player}, target {$target}\n";
                         }
                         /**
                          * Kill event
                          */
                     } else {
                         if ($event->type == "kill" && $server && $player && isset($event->target, $event->target->name, $event->target->ip, $event->target->skill) && isset($event->gun)) {
                             $target = Database::getPlayer($event->target->name, $event->target->ip, $event->target->skill);
                             $killEvent = new KillEvent();
                             $killEvent->setServer($server);
                             $killEvent->setPlayer($player);
                             $killEvent->setTarget($target);
                             $killEvent->setGun($event->gun);
                             $killEvent->insert();
                             if (Config::$debug) {
                                 echo "type[{$event->type}], {$server}, killer {$player}, target {$target}\n";
                             }
                             /**
                              * Suicide event
                              */
                         } else {
                             if ($event->type == "suicide" && $server && $player) {
                                 $suicideEvent = new SuicideEvent();
                                 $suicideEvent->setServer($server);
                                 $suicideEvent->setPlayer($player);
                                 $suicideEvent->insert();
                                 if (Config::$debug) {
                                     echo "type[{$event->type}], {$server}, {$player}\n";
                                 }
                                 /**
                                  * Intermission event
                                  */
                             } else {
                                 if ($event->type == "intermission") {
                                     if (isset($event->server->map) && isset($event->server->gamemode)) {
                                         $match = Match::create($server, $event->server->map, $event->server->gamemode);
                                         if (isset($event->players)) {
                                             foreach ($event->players as $jsonMatchPlayer) {
                                                 if (isset($jsonMatchPlayer->name, $jsonMatchPlayer->ip, $jsonMatchPlayer->skill)) {
                                                     $player = Database::getPlayer($jsonMatchPlayer->name, $jsonMatchPlayer->ip, $jsonMatchPlayer->skill);
                                                     if ($player) {
                                                         $matchPlayer = new MatchPlayer();
                                                         $matchPlayer->setMatch($match);
                                                         $matchPlayer->setPlayer($player);
                                                         $matchPlayer->setParametersFromJSON($jsonMatchPlayer);
                                                         $matchPlayer->insert();
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                 } else {
                                     if (Config::$debug) {
                                         echo "type[{$event->type}], {$server}\n";
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }