private static function CalculateTalents()
 {
     if (!self::IsCorrect()) {
         WoW_Log::WriteError('%s : character was not found.', __METHOD__);
         return false;
     }
     $talentTree = array();
     $tab_class = self::GetTalentTabForClass();
     if (!$tab_class) {
         // error message will appear from WoW_Characters::GetTalentTabForClass();
         return false;
     }
     $character_talents = self::$talents;
     $class_talents = DB::WoW()->select("SELECT * FROM `DBPREFIX_talents` WHERE `TalentTab` IN (%s) ORDER BY `TalentTab`, `Row`, `Col`", $tab_class);
     if (!$class_talents) {
         WoW_Log::WriteError('%s : unable to find talents for classID %d (tabs are: %d, %d, %d)!', __METHOD__, self::GetClassID(), $tab_class[0], $tab_class[1], $tab_class[2]);
         return false;
     }
     $talent_build = array(null, null);
     $talent_points = array();
     foreach ($tab_class as $tab_val) {
         $talent_points[0][$tab_val] = 0;
         $talent_points[1][$tab_val] = 0;
     }
     $num_tabs = array();
     $i = 0;
     foreach ($tab_class as $tab_key => $tab_value) {
         $num_tabs[$tab_key] = $i;
         $i++;
     }
     foreach ($class_talents as $class_talent) {
         $current_found = false;
         $last_spec = 0;
         foreach ($character_talents as $char_talent) {
             switch (self::GetServerType()) {
                 case SERVER_MANGOS:
                     if ($char_talent['talent_id'] == $class_talent['TalentID']) {
                         $talent_ranks = $char_talent['current_rank'] + 1;
                         $talent_build[$char_talent['spec']] .= $talent_ranks;
                         // not 0-4, is 1-5
                         $current_found = true;
                         $talent_points[$char_talent['spec']][$class_talent['TalentTab']] += $talent_ranks;
                     }
                     $last_spec = $char_talent['spec'];
                     break;
                 case SERVER_TRINITY:
                     for ($k = 1; $k < 6; $k++) {
                         if ($char_talent['spell'] == $class_talent['Rank_' . $k]) {
                             $talent_build[$char_talent['spec']] .= $k;
                             $current_found = true;
                             $talent_points[$char_talent['spec']][$class_talent['TalentTab']] += $k;
                         }
                     }
                     $last_spec = $char_talent['spec'];
                     break;
                 default:
                     WoW_Log::WriteError('%s : unknown server type (%d)!', __METHOD__, self::GetServerType());
                     return false;
                     break;
             }
         }
         if (!$current_found) {
             $talent_build[$last_spec] .= 0;
         }
     }
     self::$talent_points = $talent_points;
 }