Exemplo n.º 1
0
 /**
  * Builds arena ladder list
  * @category Arenateams class
  * @access   public
  * @param    int $type
  * @param    bool $num = false
  * @param    string $order = 'rating'
  * @param    string $sort = 'ASC'
  * @return   array
  **/
 public function BuildArenaLadderList($type, $page, $num = false, $order = 'rating', $sort = 'ASC')
 {
     if ($num == true) {
         $summary = 0;
         foreach ($this->armory->realmData as $realm_info) {
             $db = new ArmoryDatabaseHandler($realm_info['host_characters'], $realm_info['user_characters'], $realm_info['pass_characters'], $realm_info['name_characters'], $realm_info['charset_characters'], $this->armory->Log());
             $current_count = $db->selectCell("SELECT COUNT(`arena_team`.`arenateamid`) FROM `arena_team` AS `arena_team` LEFT JOIN `arena_team_stats` AS `arena_team_stats` ON `arena_team_stats`.`arenateamid` = `arena_team`.`arenateamid` WHERE `arena_team`.`type` = %d AND `arena_team_stats`.`rank` > 0", $type);
             $summary = $current_count + $summary;
         }
         return $summary;
     }
     $result_areanteams = array();
     $i = 0;
     foreach ($this->armory->realmData as $realm_info) {
         $db = new ArmoryDatabaseHandler($realm_info['host_characters'], $realm_info['user_characters'], $realm_info['pass_characters'], $realm_info['name_characters'], $realm_info['charset_characters'], $this->armory->Log());
         if ($order == 'lose') {
             // Special sorting
             $realmArenaTeamInfo = $db->select("\n                SELECT\n                `arena_team`.`arenateamid`,\n                `arena_team`.`name`,\n                `arena_team_stats`.`rating`,\n                `arena_team_stats`.`games`  AS `gamesPlayed`,\n                `arena_team_stats`.`wins`   AS `gamesWon`,\n                `arena_team_stats`.`rank`   AS `ranking`,\n                `arena_team_stats`.`played` AS `seasonGamesPlayed`,\n                `arena_team_stats`.`wins2`  AS `seasonGamesWon`,\n                `characters`.`race`,\n                `arena_team_stats`.`played`-`arena_team_stats`.`wins2` AS `lose`\n                FROM `arena_team` AS `arena_team`\n                LEFT JOIN `arena_team_stats` AS `arena_team_stats` ON `arena_team_stats`.`arenateamid`=`arena_team`.`arenateamid`\n                LEFT JOIN `characters` AS `characters` ON `characters`.`guid`=`arena_team`.`captainguid`\n                WHERE `arena_team`.`type`=%d AND `arena_team_stats`.`rank` > 0\n                ORDER BY `lose` %s LIMIT %d, 20", $type, $sort, $page);
         } else {
             $realmArenaTeamInfo = $db->select("\n                SELECT\n                `arena_team`.`arenateamid`,\n                `arena_team`.`name`,\n                `arena_team_stats`.`rating`,\n                `arena_team_stats`.`games`  AS `gamesPlayed`,\n                `arena_team_stats`.`wins`   AS `gamesWon`,\n                `arena_team_stats`.`rank`   AS `ranking`,\n                `arena_team_stats`.`played` AS `seasonGamesPlayed`,\n                `arena_team_stats`.`wins2`  AS `seasonGamesWon`,\n                `characters`.`race`\n                FROM `arena_team` AS `arena_team`\n                LEFT JOIN `arena_team_stats` AS `arena_team_stats` ON `arena_team_stats`.`arenateamid`=`arena_team`.`arenateamid`\n                LEFT JOIN `characters` AS `characters` ON `characters`.`guid`=`arena_team`.`captainguid`\n                WHERE `arena_team`.`type`=%d AND `arena_team_stats`.`rank` > 0\n                ORDER BY %s %s LIMIT %d, 20", $type, $order, $sort, $page);
         }
         if (!$realmArenaTeamInfo || !is_array($realmArenaTeamInfo)) {
             $this->armory->Log()->writeLog('%s : loop finished, no arena teams found (order: %s, type: %d, page: %d, sort: %s, db_name: %s).', __METHOD__, $order, $type, $page, $sort, $realm_info['name_characters']);
             continue;
         }
         foreach ($realmArenaTeamInfo as $team) {
             $result_areanteams[$i]['data'] = $team;
             $result_areanteams[$i]['data']['num'] = $i + 1;
             $result_areanteams[$i]['data']['battleGroup'] = $this->armory->armoryconfig['defaultBGName'];
             $result_areanteams[$i]['data']['faction'] = null;
             $result_areanteams[$i]['data']['factionId'] = Utils::GetFactionId($result_areanteams[$i]['data']['race']);
             $result_areanteams[$i]['data']['lastSeasonRanking'] = null;
             $result_areanteams[$i]['data']['realm'] = $realm_info['name'];
             $result_areanteams[$i]['data']['realmUrl'] = sprintf('b=%s&r=%s&ts=%d&select=%s', urlencode($this->armory->armoryconfig['defaultBGName']), urlencode($realm_info['name']), $type, urlencode($team['name']));
             $result_areanteams[$i]['data']['relevance'] = 0;
             $result_areanteams[$i]['data']['season'] = 0;
             $result_areanteams[$i]['data']['size'] = $type;
             $result_areanteams[$i]['data']['teamSize'] = $type;
             $result_areanteams[$i]['data']['teamUrl'] = sprintf('r=%s&ts=%d&t=%s', urlencode($this->armory->armoryconfig['defaultBGName']), urlencode($realm_info['name']), $type, urlencode($team['name']));
             $result_areanteams[$i]['emblem'] = self::GetArenaTeamEmblem($team['arenateamid'], $db);
             unset($result_areanteams[$i]['data']['arenateamid'], $result_areanteams[$i]['data']['captainguid']);
             $i++;
         }
     }
     if (!isset($result_areanteams[0]['data'])) {
         $this->armory->Log()->writeLog('%s : unable to find any arena teams', __METHOD__);
         return false;
     }
     return $result_areanteams;
 }
Exemplo n.º 2
0
 /**
  * Builds arena ladder list
  * @category Arenateams class
  * @access   public
  * @param    int $type
  * @param    bool $num = false
  * @param    string $order = 'rating'
  * @param    string $sort = 'ASC'
  * @return   array
  **/
 public function BuildArenaLadderList($type, $page, $num = false, $order = 'rating', $sort = 'ASC')
 {
     if ($num == true) {
         $summary = 0;
         foreach (Armory::$realmData as $realm_info) {
             $db = new ArmoryDatabaseHandler($realm_info['host_characters'], $realm_info['user_characters'], $realm_info['pass_characters'], $realm_info['name_characters'], $realm_info['charset_characters']);
             $current_count = $db->selectCell("SELECT COUNT(`arena_team`.`arenateamid`) FROM `arena_team` AS `arena_team` LEFT JOIN `arena_team_stats` AS `arena_team_stats` ON `arena_team_stats`.`arenateamid` = `arena_team`.`arenateamid` WHERE `arena_team`.`type` = %d AND `arena_team_stats`.`rank` > 0", $type);
             $summary += $current_count;
         }
         return $summary;
     }
     $result_areanteams = array();
     $i = 0;
     foreach (Armory::$realmData as $realm_info) {
         $db = new ArmoryDatabaseHandler($realm_info['host_characters'], $realm_info['user_characters'], $realm_info['pass_characters'], $realm_info['name_characters'], $realm_info['charset_characters']);
         if ($order == 'lose') {
             // Special sorting
             switch ($realm_info['type']) {
                 default:
                 case SERVER_MANGOS:
                     $realmArenaTeamInfo = $db->select("\n                        SELECT\n                        `arena_team`.`arenateamid`,\n                        `arena_team`.`name`,\n                        `arena_team_stats`.`rating`,\n                        `arena_team_stats`.`games_week`  AS `gamesPlayed`,\n                        `arena_team_stats`.`wins_week`   AS `gamesWon`,\n                        `arena_team_stats`.`rank`   AS `ranking`,\n                        `arena_team_stats`.`games_season` AS `seasonGamesPlayed`,\n                        `arena_team_stats`.`wins_season`  AS `seasonGamesWon`,\n                        `characters`.`race`,\n                        `arena_team_stats`.`games_season`-`arena_team_stats`.`wins_season` AS `lose`\n                        FROM `arena_team` AS `arena_team`\n                        LEFT JOIN `arena_team_stats` AS `arena_team_stats` ON `arena_team_stats`.`arenateamid`=`arena_team`.`arenateamid`\n                        LEFT JOIN `characters` AS `characters` ON `characters`.`guid`=`arena_team`.`captainguid`\n                        WHERE `arena_team`.`type`=%d AND `arena_team_stats`.`rank` > 0\n                        ORDER BY `lose` %s LIMIT %d, 20", $type, $sort, $page);
                     break;
                 case SERVER_TRINITY:
                     $realmArenaTeamInfo = $db->select("\n                        SELECT\n                        `arena_team`.`arenaTeamId` AS `arenateamid`,\n                        `arena_team`.`name`,\n                        `arena_team`.`rating`,\n                        `arena_team`.`weekGames`   AS `gamesPlayed`,\n                        `arena_team`.`weekWins`    AS `gamesWon`,\n                        `arena_team`.`rank`        AS `ranking`,\n                        `arena_team`.`seasonGames` AS `seasonGamesPlayed`,\n                        `arena_team`.`seasonWins`  AS `seasonGamesWon`,\n                        `characters`.`race`,\n                        `arena_team`.`seasonGames`-`arena_team`.`seasonWins` AS `lose`\n                        FROM `arena_team` AS `arena_team`\n                        LEFT JOIN `characters` AS `characters` ON `characters`.`guid`=`arena_team`.`captainguid`\n                        WHERE `arena_team`.`type`=%d AND `arena_team`.`rank` > 0\n                        ORDER BY `lose` %s LIMIT %d, 20", $type, $sort, $page);
                     break;
             }
         } else {
             switch ($realm_info['type']) {
                 default:
                 case SERVER_MANGOS:
                     $realmArenaTeamInfo = $db->select("\n                        SELECT\n                        `arena_team`.`arenateamid`,\n                        `arena_team`.`name`,\n                        `arena_team_stats`.`rating`,\n                        `arena_team_stats`.`games_week`  AS `gamesPlayed`,\n                        `arena_team_stats`.`wins_week`   AS `gamesWon`,\n                        `arena_team_stats`.`rank`   AS `ranking`,\n                        `arena_team_stats`.`games_season` AS `seasonGamesPlayed`,\n                        `arena_team_stats`.`wins_season`  AS `seasonGamesWon`,\n                        `characters`.`race`\n                        FROM `arena_team` AS `arena_team`\n                        LEFT JOIN `arena_team_stats` AS `arena_team_stats` ON `arena_team_stats`.`arenateamid`=`arena_team`.`arenaTeamId`\n                        LEFT JOIN `characters` AS `characters` ON `characters`.`guid`=`arena_team`.`captainGuid`\n                        WHERE `arena_team`.`type`=%d AND `arena_team_stats`.`rank` > 0\n                        ORDER BY %s %s LIMIT %d, 20", $type, $order, $sort, $page);
                     break;
                 case SERVER_TRINITY:
                     $realmArenaTeamInfo = $db->select("\n                        SELECT\n                        `arena_team`.`arenaTeamId` AS `arenateamid`,\n                        `arena_team`.`name`,\n                        `arena_team`.`rating`,\n                        `arena_team`.`weekGames`   AS `gamesPlayed`,\n                        `arena_team`.`weekWins`    AS `gamesWon`,\n                        `arena_team`.`rank`        AS `ranking`,\n                        `arena_team`.`seasonGames` AS `seasonGamesPlayed`,\n                        `arena_team`.`seasonWins`  AS `seasonGamesWon`,\n                        `characters`.`race`\n                        FROM `arena_team` AS `arena_team`\n                        LEFT JOIN `characters` AS `characters` ON `characters`.`guid`=`arena_team`.`captainGuid`\n                        WHERE `arena_team`.`type`=%d AND `arena_team`.`rank` > 0\n                        ORDER BY %s %s LIMIT %d, 20", $type, $order, $sort, $page);
                     break;
             }
         }
         foreach ($realmArenaTeamInfo as $team) {
             $result_areanteams[$i]['data'] = $team;
             $result_areanteams[$i]['data']['num'] = $i + 1;
             $result_areanteams[$i]['data']['battleGroup'] = Armory::$armoryconfig['defaultBGName'];
             $result_areanteams[$i]['data']['faction'] = null;
             $result_areanteams[$i]['data']['factionId'] = Utils::GetFactionId($result_areanteams[$i]['data']['race']);
             $result_areanteams[$i]['data']['lastSeasonRanking'] = null;
             $result_areanteams[$i]['data']['realm'] = $realm_info['name'];
             $result_areanteams[$i]['data']['realmUrl'] = sprintf('b=%s&r=%s&ts=%d&select=%s', urlencode(Armory::$armoryconfig['defaultBGName']), urlencode($realm_info['name']), $type, urlencode($team['name']));
             $result_areanteams[$i]['data']['relevance'] = 0;
             $result_areanteams[$i]['data']['season'] = 0;
             $result_areanteams[$i]['data']['size'] = $type;
             $result_areanteams[$i]['data']['teamSize'] = $type;
             $result_areanteams[$i]['data']['teamUrl'] = sprintf('r=%s&ts=%d&t=%s', urlencode(Armory::$armoryconfig['defaultBGName']), urlencode($realm_info['name']), $type, urlencode($team['name']));
             $result_areanteams[$i]['emblem'] = self::GetArenaTeamEmblem($team['arenateamid'], $db);
             unset($result_areanteams[$i]['data']['arenateamid'], $result_areanteams[$i]['data']['captainguid']);
             $i++;
         }
     }
     if (!isset($result_areanteams[0]['data'])) {
         return false;
     }
     return $result_areanteams;
 }
Exemplo n.º 3
0
 public function PerformCharactersSearch($num = false)
 {
     if (!$this->searchQuery) {
         $this->armory->Log()->writeLog('%s : searchQuery not defined', __METHOD__);
         return false;
     }
     $currentTimeStamp = time();
     $results = array();
     // Full results
     $current_realm = array();
     $count_results = 0;
     // All realms results
     $count_results_currrent_realm = 0;
     // Current realm results
     $db = null;
     // Temporary handler
     $countRealmData = count($this->armory->realmData);
     if ($num == true) {
         foreach ($this->armory->realmData as $realm_info) {
             $count_results_currrent_realm = 0;
             $db = new ArmoryDatabaseHandler($realm_info['host_characters'], $realm_info['user_characters'], $realm_info['pass_characters'], $realm_info['name_characters'], $realm_info['charset_characters'], $this->armory->Log());
             $characters_data[] = $db->select("SELECT `guid`, `level`, `account` FROM `characters` WHERE `name`='%s' AND `level` >= %d LIMIT 200", $this->searchQuery, $this->armory->armoryconfig['minlevel']);
         }
         for ($ii = 0; $ii < $countRealmData; $ii++) {
             $count_result_chars = count($characters_data[$ii]);
             for ($i = 0; $i < $count_result_chars; $i++) {
                 if (isset($characters_data[$ii][$i]) && self::IsCharacterAllowedForSearch($characters_data[$ii][$i]['guid'], $characters_data[$ii][$i]['level'], $characters_data[$ii][$i]['account'])) {
                     $count_results++;
                 }
             }
         }
         return $count_results;
     }
     $accounts_cache = array();
     // For relevance calculation
     foreach ($this->armory->realmData as $realm_info) {
         $db = new ArmoryDatabaseHandler($realm_info['host_characters'], $realm_info['user_characters'], $realm_info['pass_characters'], $realm_info['name_characters'], $realm_info['charset_characters'], $this->armory->Log());
         if (!$db) {
             continue;
         }
         $current_realm = $db->select("SELECT `guid`, `name`, `class` AS `classId`, `gender` AS `genderId`, `race` AS `raceId`, `level`, `account` FROM `characters` WHERE `name` = '%s'", $this->searchQuery);
         if (!$current_realm) {
             continue;
         }
         $count_current_realm = count($current_realm);
         foreach ($current_realm as $realm) {
             if (!self::IsCharacterAllowedForSearch($realm['guid'], $realm['level'], $realm['account'])) {
                 continue;
             }
             if ($realm['guildId'] = $db->selectCell("SELECT `guildid` FROM `guild_member` WHERE `guid`=%d", $realm['guid'])) {
                 $realm['guild'] = $db->selectCell("SELECT `name` FROM `guild` WHERE `guildid`=%d", $realm['guildId']);
                 $realm['guildUrl'] = sprintf('r=%s&gn=%s', urlencode($realm_info['name']), urlencode($realm['guild']));
             }
             $realm['url'] = sprintf('r=%s&cn=%s', urlencode($realm_info['name']), urlencode($realm['name']));
             $realm['battleGroup'] = $this->armory->armoryconfig['defaultBGName'];
             $realm['battleGroupId'] = 1;
             $realm['class'] = $this->armory->aDB->selectCell("SELECT `name_%s` FROM `ARMORYDBPREFIX_classes` WHERE `id`=%d", $this->armory->GetLocale(), $realm['classId']);
             $realm['race'] = $this->armory->aDB->selectCell("SELECT `name_%s` FROM `ARMORYDBPREFIX_races` WHERE `id`=%d", $this->armory->GetLocale(), $realm['raceId']);
             $realm['realm'] = $realm_info['name'];
             $realm['factionId'] = Utils::GetFactionId($realm['raceId']);
             $realm['searchRank'] = 1;
             //???
             /* Calculate relevance */
             $realm['relevance'] = 100;
             // Relevance by last login date will check `realmd`.`account`.`last_login` timestamp
             // First of all - check character level
             $temp_value = $realm['level'];
             if ($temp_value > 70 && $temp_value < PLAYER_MAX_LEVEL) {
                 $realm['relevance'] -= 20;
             } elseif ($temp_value > 60 && $temp_value < 70) {
                 $realm['relevance'] -= 25;
             } elseif ($temp_value > 50 && $temp_value < 60) {
                 $realm['relevance'] -= 30;
             } elseif ($temp_value > 40 && $temp_value < 50) {
                 $realm['relevance'] -= 35;
             } elseif ($temp_value > 30 && $temp_value < 40) {
                 $realm['relevance'] -= 40;
             } elseif ($temp_value > 20 && $temp_value < 30) {
                 $realm['relevance'] -= 45;
             } elseif ($temp_value < 20) {
                 $realm['relevance'] -= 50;
                 // characters with level < 20 have 50% relevance and other reasons can't change this value
                 unset($realm['account'], $realm['guid']);
                 $results[] = $realm;
                 continue;
             }
             // Check last login date. If it's more than 2 days, decrease relevance by 4 for every day
             if (!isset($accounts_cache[$realm['account']])) {
                 $lastLogin = $this->armory->rDB->selectCell("SELECT `last_login` FROM `account` WHERE `id`=%d", $realm['account']);
                 $accounts_cache[$realm['account']] = $lastLogin;
             } else {
                 $lastLogin = $accounts_cache[$realm['account']];
             }
             $lastLoginTimestamp = strtotime($lastLogin);
             $diff = $currentTimeStamp - $lastLoginTimestamp;
             if ($lastLogin && $diff > 0) {
                 // 1 day is 86400 seconds
                 $totalDays = round($diff / 86400);
                 if ($totalDays > 2) {
                     $decreaseRelevanceByLogin = $totalDays * 4;
                     $realm['relevance'] -= $decreaseRelevanceByLogin;
                 }
             }
             // Relevance for characters can't be less than 50
             if ($realm['relevance'] < 50) {
                 $realm['relevance'] = 50;
             }
             // Relevance can't be more than 100
             if ($realm['relevance'] > 100) {
                 $realm['relevance'] = 100;
             }
             unset($realm['account'], $realm['guid']);
             $results[] = $realm;
         }
     }
     if ($results) {
         return $results;
     }
     return false;
 }
Exemplo n.º 4
0
 /**
  * Returns array with all characters.
  * @category Utils class
  * @access   public
  * @return   array
  **/
 public function GetAllCharacters()
 {
     if (!isset($_SESSION['accountId'])) {
         return false;
     }
     $results = array();
     foreach (Armory::$realmData as $realm_info) {
         $db = new ArmoryDatabaseHandler($realm_info['host_characters'], $realm_info['user_characters'], $realm_info['pass_characters'], $realm_info['name_characters'], $realm_info['charset_characters']);
         if (!$db) {
             continue;
         }
         $chars_data = $db->select("\n            SELECT\n            `characters`.`guid`,\n            `characters`.`name`, \n            `characters`.`class` AS `classId`, \n            `characters`.`race` AS `raceId`, \n            `characters`.`gender` AS `genderId`, \n            `characters`.`level`,\n            `guild_member`.`guildid` AS `guildId`,\n            `guild`.`name` AS `guild`\n            FROM `characters` AS `characters`\n            LEFT JOIN `guild_member` AS `guild_member` ON `guild_member`.`guid`=`characters`.`guid`\n            LEFT JOIN `guild` AS `guild` ON `guild`.`guildid`=`guild_member`.`guildId`\n            WHERE `characters`.`account`=%d", $_SESSION['accountId']);
         if (!$chars_data) {
             Armory::Log()->writeLog('%s : no characters found for account %d in `%s` database', __METHOD__, $_SESSION['accountId'], $realm_info['name_characters']);
             continue;
         }
         foreach ($chars_data as $realm) {
             $realm['account'] = strtoupper($_SESSION['username']);
             $realm['factionId'] = self::GetFactionId($realm['raceId']);
             $realm['realm'] = $realm_info['name'];
             $realm['relevance'] = 100;
             if ($realm['level'] < Armory::$armoryconfig['minlevel']) {
                 $realm['relevance'] = 0;
             } elseif ($realm['level'] >= Armory::$armoryconfig['minlevel'] && $realm['level'] <= 79) {
                 $realm['relevance'] = $realm['level'];
             } elseif ($realm['level'] == MAX_PLAYER_LEVEL) {
                 $realm['relevance'] = 100;
             } else {
                 $realm['relevance'] = 0;
                 // Unknown
             }
             $realm['url'] = sprintf('r=%s&cn=%s', urlencode($realm['realm']), urlencode($realm['name']));
             $realm['selected'] = Armory::$aDB->selectCell("SELECT `selected` FROM `ARMORYDBPREFIX_login_characters` WHERE `account`=%d AND `guid`=%d AND `realm_id`=%d LIMIT 1", $_SESSION['accountId'], $realm['guid'], $realm_info['id']);
             if ($realm['selected'] > 2) {
                 $realm['selected'] = 2;
             } elseif ($realm['selected'] == 0) {
                 unset($realm['selected']);
             }
             $ach = new Achievements();
             $ach->InitAchievements($realm['guid'], $db);
             $realm['achPoints'] = $ach->CalculateAchievementPoints();
             unset($realm['guid'], $ach);
             // Do not show GUID in XML results
             $results[] = $realm;
         }
     }
     if (is_array($results)) {
         return $results;
     }
     Armory::Log()->writeLog('%s : unable to find any character for account %d', __METHOD__, $_SESSION['accountId']);
     return false;
 }