예제 #1
0
 public function init()
 {
     if (($data = cache()->get(CacheNames::SERVER_STATUS)) === FALSE) {
         if (config('server_status.allow') == 1) {
             $data['content'] = array();
             $data['totalOnline'] = 0;
             $criteria = new CDbCriteria(array('select' => 't.name, t.id, t.fake_online, t.ip, t.port', 'scopes' => array('opened'), 'with' => array('ls' => array('select' => 'ls.ip, ls.port, ls.name', 'scopes' => array('opened')))));
             $gsList = Gs::model()->findAll($criteria);
             if ($gsList) {
                 foreach ($gsList as $gs) {
                     try {
                         $l2 = l2('gs', $gs->id)->connect();
                         // Кол-во игроков
                         $online = $l2->getDb()->createCommand("SELECT COUNT(0) FROM `characters` WHERE `online` = 1")->queryScalar();
                         // Fake online
                         if (is_numeric($gs->fake_online) && $gs->fake_online > 0) {
                             $online += Lineage::fakeOnline($online, $gs->fake_online);
                         }
                         $data['content'][$gs->id] = array('gs_status' => Lineage::getServerStatus($gs->ip, $gs->port), 'ls_status' => isset($gs->ls) ? Lineage::getServerStatus($gs->ls->ip, $gs->ls->port) : 'offline', 'online' => $online, 'gs' => $gs);
                         $data['totalOnline'] += $online;
                     } catch (Exception $e) {
                         $data[$gs->id]['error'] = $e->getMessage();
                     }
                 }
             }
             if (config('server_status.cache') > 0) {
                 cache()->set(CacheNames::SERVER_STATUS, $data, config('server_status.cache') * 60);
             }
         }
     }
     app()->controller->renderPartial('//server-status', $data);
 }
예제 #2
0
 private function total()
 {
     $ls = l2('ls', $this->_gs->login_id)->connect();
     // Кол-во аккаунтов
     $data['countAccounts'] = (int) $ls->getCountAccounts();
     $gs = l2('gs', $this->_gs_id)->connect();
     // Кол-во персонажей
     $data['countCharacters'] = (int) $gs->getCountCharacters();
     // В игре
     $data['countOnline'] = (int) $gs->getCountOnlineCharacters();
     // Fake online
     if ($this->_gs->fake_online > 0) {
         $data['countOnline'] += Lineage::fakeOnline($data['countOnline'], $this->_gs->fake_online);
     }
     // Кол-во кланов
     $data['countClans'] = (int) $gs->getCountClans();
     // Men
     $data['countMen'] = $gs->getCountMen();
     // Female
     $data['countFemale'] = $gs->getCountWomen();
     // Races
     $data['races'] = array('human' => $gs->getCountRaceHuman(), 'elf' => $gs->getCountRaceElf(), 'dark_elf' => $gs->getCountRaceDarkElf(), 'ork' => $gs->getCountRaceOrk(), 'dwarf' => $gs->getCountRaceDwarf());
     $data['races_percentage'] = array('human' => $data['races']['human'] > 0 ? round($data['races']['human'] / $data['countCharacters'] * 100) : 0, 'elf' => $data['races']['elf'] > 0 ? round($data['races']['elf'] / $data['countCharacters'] * 100) : 0, 'dark_elf' => $data['races']['dark_elf'] > 0 ? round($data['races']['dark_elf'] / $data['countCharacters'] * 100) : 0, 'ork' => $data['races']['ork'] > 0 ? round($data['races']['ork'] / $data['countCharacters'] * 100) : 0, 'dwarf' => $data['races']['dwarf'] > 0 ? round($data['races']['dwarf'] / $data['countCharacters'] * 100) : 0);
     if ($gs->getChronicle() != 'interlude') {
         $data['races']['kamael'] = $gs->getCountRaceKamael();
         $data['races_percentage']['kamael'] = $data['races']['kamael'] > 0 ? round($data['races']['kamael'] / $data['countCharacters'] * 100) : 0;
     }
     return $this->renderPartial('//stats/' . __FUNCTION__, $data, TRUE);
 }