select(' SELECT * FROM ?_talenttab WHERE classes = ?d ORDER BY `order`, `pets`', $mask ); $result = []; for ($l = 0; $l < count($tabs); $l++) { $talents = DB::Aowow()->select(' SELECT t.*, s.* FROM ?_talent t, ?_spell s WHERE t.`tab`= ?d AND s.`Id` = t.`rank1` ORDER by t.`row`, t.`col` ', $tabs[$l]['id'] ); $result[$l] = array( 'n' => Util::localizedString($tabs[$l], 'name'), 't' => [] ); if (!$class) { $petFamId = log($tabs[$l]['pets'], 2); $result[$l]['icon'] = $petFamIcons[$petFamId]; $petCategories = DB::Aowow()->SelectCol('SELECT Id AS ARRAY_KEY, categoryEnumId FROM ?_creatureFamily WHERE petTalentType = ?d', $petFamId); $result[$l]['f'] = array_keys($petCategories); } // talent dependencies go here $depLinks = []; $tNums = []; for($j = 0; $j < count($talents); $j++) { $tNums[$talents[$j]['id']] = $j; $d = []; $s = []; $i = $talents[$j]['id']; $n = Util::localizedString($talents[$j], 'name'); $x = $talents[$j]['col']; $y = $talents[$j]['row']; $r = null; $t = []; $icon = $talents[$j]['iconString']; $m = $talents[$j]['rank2'] == 0 ? 1 : ( $talents[$j]['rank3'] == 0 ? 2 : ( $talents[$j]['rank4'] == 0 ? 3 : ( $talents[$j]['rank5'] == 0 ? 4 : 5 ) ) ); // duplet handling $f = []; foreach ($petCategories as $k => $v) { // cant handle 64bit integer .. split if ($v >= 32 && ((1 << ($v - 32)) & $talents[$j]['petmask2'])) $f[] = $k; else if ($v < 32 && ((1 << $v) & $talents[$j]['petmask'])) $f[] = $k; } for ($k = 0; $k <= ($m - 1); $k++) { $tSpell = new SpellList(array(['s.id', $talents[$j]['rank'.($k + 1)]])); $d[] = $tSpell->parseText(); $s[] = $talents[$j]['rank'.($k + 1)]; if ($talents[$j]['isSpell']) $t[] = $tSpell->getTalentHeadForCurrent(); } if ($talents[$j]['dependsOn']) { // we didn't encounter the required talent yet => create reference if (!isset($tNums[$talents[$j]['dependsOn']])) $depLinks[$talents[$j]['dependsOn']] = $j; $r = [$tNums[$talents[$j]['dependsOn']], $talents[$j]['dependsOnRank'] + 1]; } $result[$l]['t'][$j] = array( 'i' => $i, 'n' => $n, 'm' => $m, 'd' => $d, 's' => $s, 'x' => $x, 'y' => $y, ); if (isset($r)) $result[$l]['t'][$j]['r'] = $r; if (!empty($t)) $result[$l]['t'][$j]['t'] = $t; if (!empty($f)) $result[$l]['t'][$j]['f'] = $f; if ($class) $result[$l]['t'][$j]['iconname'] = $icon; // If this talent is a reference, add it to the array of talent dependencies if (isset($depLinks[$talents[$j]['id']])) { $result[$l]['t'][$depLinks[$talents[$j]['id']]]['r'][0] = $j; unset($depLinks[$talents[$j]['id']]); } } // Remove all dependencies for which the talent has not been found foreach ($depLinks as $dep_link) unset($result[$l]['t'][$dep_link]['r']); } return $result; } $classes = [CLASS_WARRIOR, CLASS_PALADIN, CLASS_HUNTER, CLASS_ROGUE, CLASS_PRIEST, CLASS_DEATHKNIGHT, CLASS_SHAMAN, CLASS_MAGE, CLASS_WARLOCK, CLASS_DRUID]; $locales = [LOCALE_EN, LOCALE_FR, LOCALE_DE, LOCALE_ES, LOCALE_RU]; // my neighbour is noisy as fuck and my head hurts, so .. $petFamIcons = ['Ability_Druid_KingoftheJungle', 'Ability_Druid_DemoralizingRoar', 'Ability_EyeOfTheOwl']; // .. i've no idea where to fetch these from $petIcons = ''; // check directory-structure foreach (Util::$localeStrings as $dir) if (!is_dir('datasets\\'.$dir)) mkdir('datasets\\'.$dir, 0755, true); echo "script set up in ".Util::execTime()."
\n"; foreach ($locales as $lId) { User::useLocale($lId); // TalentCalc foreach ($classes as $cMask) { $cId = log($cMask, 2) + 1; $file = 'datasets\\'.User::$localeString.'\\talents-'.$cId; $toFile = '$WowheadTalentCalculator.registerClass('.$cId.', '.json_encode(buildTree($cId), JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK).')'; $handle = fOpen($file, "w"); fWrite($handle, $toFile); fClose($handle); echo "done class: ".$cId." loc: ".$lId." in ".Util::execTime()."
\n"; } // PetCalc if (empty($petIcons)) { $pets = DB::Aowow()->SelectCol('SELECT Id AS ARRAY_KEY, iconString FROM ?_creatureFamily WHERE petTalentType <> -1'); $petIcons = json_encode($pets, JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK); } $toFile = "var g_pet_icons = ".$petIcons."\n\n"; $toFile .= 'var g_pet_talents = '.json_encode(buildTree(0), JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK); $file = 'datasets\\'.User::$localeString.'\\pet-talents'; $handle = fOpen($file, "w"); fWrite($handle, $toFile); fClose($handle); echo "done pets loc: ".$lId." in ".Util::execTime()."
\n"; } echo "
\nall done"; User::useLocale(LOCALE_EN); $stats = DB::Aowow()->getStatistics(); echo "
\n".$stats['count']." queries in: ".Util::formatTime($stats['time'] * 1000); ?>