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; }