function makeTree($className, $treeData) { global $mysql; $talents = $mysql->getRows("select * from talent where ref_tab = ?1 order by row,col", $treeData['id'], 'armory'); $crrTier = -1; $open = 0; foreach ($talents as $talent) { // Add new tier if ($talent['row'] != $crrTier) { if ($crrTier != -1) { $output .= '</div>'; } $crrTier = $talent['row']; $output .= '<div class="tier" id="' . $className . $TreeData['nameESC'] . '_tier' . $crrTier . '">'; $open++; } // Get max rank $maxRank = 1; while ($talent['rank' . $maxRank]) { $maxRank++; } $maxRank--; // Get spell data for ($i = 1; $i <= $maxRank; $i++) { $rankData[$i] = getSpell($talent['rank' . $i]); } $talentName = str_replace(array(' ', "'"), '', $rankData[1]['SpellName']); // Get icon $icon = $mysql->getRow("select name from spellicon where id = ?1", $rankData[1]['SpellIconID'], 'armory'); if ($req = $mysql->getRow("select rank1 from talent where id = ?1", $talent['req_talent'])) { $req = getSpell($req['rank1']); $req = str_replace(array(' ', "'"), '', $req['SpellName']); } $output .= '<div class="talent staticTip col' . $talent['col'] . '" id="' . $talentName . '_iconHolder" style="background-image:url(\'images/icon43/' . $icon['name'] . '.gif\');">'; $output .= '<div class="talentHolder tier' . ($talent['row'] + 1) . ' ' . ($req ? 'requires t_' . $req : '') . ' disabled" id="' . $talentName . '" onmousedown="addTalent(event, \'' . $talentName . '\');" onmouseover="makeTalentTooltip(\'' . $talentName . '\');">'; for ($i = 1; $i <= $maxRank; $i++) { $output .= '<span id="rank' . $i . '_' . $talentName . '" style="display: none">' . spellReplace($rankData[$i]) . '</span>'; } $output .= '<div class="iconhighlight"></div> <span id="' . $talentName . '_name" style="display: none;">' . $rankData[1]['SpellName'] . '</span><span id="' . $talentName . '_icon" style="display: none;">' . $icon['name'] . '</span> <div class="rankCtr"> <span id="count_' . $talentName . '">0</span><span>/</span><span id="total_' . $talentName . '">' . $maxRank . '</span> </div> </div> </div>'; } $output .= '</div>'; while ($open <= 10) { $output .= '<div class="tier" id="' . $className . $TreeData['nameESC'] . '_tier' . $open . '">.</div>'; $open++; } return $output; }
function noBorderTalentTable($talentTab, $rank) { global $game_text; if ($rank) { $spell = getSpell($talentTab["Rank_{$rank}"]); } else { $spell = getSpell($talentTab["Rank_1"]); } if ($spell) { $maxRank = 0; if ($talentTab["Rank_5"]) { $maxRank = 5; } else { if ($talentTab["Rank_4"]) { $maxRank = 4; } else { if ($talentTab["Rank_3"]) { $maxRank = 3; } else { if ($talentTab["Rank_2"]) { $maxRank = 2; } else { if ($talentTab["Rank_1"]) { $maxRank = 1; } } } } } echo "<table class=spell><tbody>"; $name = $spell['SpellName']; // if ($spell['Rank']) $name .=" ($spell[Rank])"; echo "<tr><td class=Name>" . $name . "</td></tr>"; echo "<tr><td>" . $game_text['talent_rank'] . " {$rank} / {$maxRank}</td></tr>"; echo "<tr><td class=Talent>" . getSpellDesc($spell) . "</td></tr>"; if ($rank != 0 && $rank != $maxRank) { echo "<tr><td><br>" . $game_text['talent_next_rank'] . "</td></tr>"; $spell = getSpell($talentTab["Rank_" . ($rank + 1)]); echo "<tr><td class=Talent>" . getSpellDesc($spell) . "</td></tr>"; } echo "</tbody></table>"; } else { echo "Talent error"; } }
function noBorderEnchantTable($enc) { global $UseorEquip, $game_text; echo "<table class=spell><tbody>"; echo "<tr><td class=Name>" . $enc['description'] . "</td></tr>"; // Вывод требования скила if ($enc['requiredSkill']) { echo '<tr><td class=req>' . sprintf($game_text['req_skill'], getSkillName($enc['requiredSkill']), $enc['requiredSkillRank']) . '</td></tr>'; } for ($i = 1; $i < 4; $i++) { if ($type = $enc['display_type_' . $i]) { $amount = $enc['amount_' . $i]; $spellid = $enc['spellid_' . $i]; switch ($type) { case 1: // ITEM_ENCHANTMENT_TYPE_COMBAT_SPELL if ($spell = getSpell($spellid)) { if ($desc = getSpellDesc($spell)) { $text = $desc; } else { if ($buff = getSpellBuff($spell)) { $text = $buff; } else { $text = $spell['SpellName']; } } echo "<tr><td class=SpellEnch>" . $UseorEquip[2] . " <a href=\"?spell={$spellid}\">" . $text . "</a></td></tr>"; } else { echo "<tr><td class=SpellEnch>" . $UseorEquip[2] . " cast ?? {$spellid}</td></tr>"; } break; case 2: // ITEM_ENCHANTMENT_TYPE_DAMAGE echo "<tr><td class=SpellEnch>+ {$amount} damage</td></tr>"; break; case 3: // ITEM_ENCHANTMENT_TYPE_EQUIP_SPELL if ($spell = getSpell($spellid)) { if ($desc = getSpellDesc($spell)) { $text = $desc; } else { if ($buff = getSpellBuff($spell)) { $text = $buff; } else { $text = $spell['SpellName']; } } echo "<tr><td class=SpellEnch>" . $UseorEquip[1] . " <a href=\"?spell={$spellid}\">" . $text . "</a></td></tr>"; } else { echo "<tr><td class=SpellDesc>" . $UseorEquip[1] . " cast ?? {$spellid}</td></tr>"; } break; case 4: // ITEM_ENCHANTMENT_TYPE_RESISTANCE echo "<tr><td> " . getResistanceText($spellid, $amount) . "</td></tr>"; break; case 5: // ITEM_ENCHANTMENT_TYPE_STAT if ($spellid >= 0 && $spellid < 8) { echo "<tr><td class=SpellEnch> " . getItemBonusText($spellid, $amount) . "</td></tr>"; } else { echo "<tr><td class=SpellEnch> " . getItemBonusText($spellid, $amount) . "</td></tr>"; } break; case 6: // ITEM_ENCHANTMENT_TYPE_TOTEM echo "<tr><td class=SpellEnch>+ {$amount} damage (Rockbiter)</td></tr>"; break; case 7: // On Use if ($spell = getSpell($spellid)) { if ($desc = getSpellDesc($spell)) { $text = $desc; } else { if ($buff = getSpellBuff($spell)) { $text = $buff; } else { $text = $spell['SpellName']; } } echo "<tr><td class=SpellEnch>" . $UseorEquip[0] . " <a href=\"?spell={$spellid}\">" . $text . "</a></td></tr>"; } else { echo "<tr><td class=SpellDesc>" . $UseorEquip[0] . " cast ?? {$spellid}</td></tr>"; } break; case 8: // Add Sockets Enchant echo "<tr><td class=SpellEnch>Add Socket Enchant</td></tr>"; break; default: echo "<tr><td>Err type {$type}</td></tr>"; break; } } } echo "</tbody></table>"; }
function get_spell_details($spell_id) { $spell = getSpell($spell_id); if ($spell) { return getSpellDesc($spell); } return "Spell id - {$spell_id}"; }
function getRecipeItem($recipe) { global $wDB; if ($recipe['spellid_1'] == 483) { // Получаем спелл которому обучает $spell = getSpell($recipe['spellid_2']); if ($spell = getSpell($recipe['spellid_2'])) { return getItem($spell['EffectItemType_1']); } } return 0; }
function showEffectData($spell, $effect) { echo '<tr>'; echo '<th>Effect ' . ($effect - 1) . ':</th>'; echo '<td colspan=3>'; if ($spell['Effect_' . $effect] == 0) { echo 'No Effect'; return; } else { $eff_id = $spell['Effect_' . $effect]; $aura = $spell['EffectApplyAuraName_' . $effect]; $itemId = $spell['EffectItemType_' . $effect]; $triggerId = $spell['EffectTriggerSpell_' . $effect]; $radius = $spell['EffectRadiusIndex_' . $effect]; $amount = getBasePointDesc($spell, $effect); if ($aura == 107 or $aura == 108 or $aura == 109 or $aura == 112) { $spellFamilyMask = $itemId; $itemId = 0; } echo "({$eff_id}) " . getSpellEffectName($eff_id); if ($aura) { showAuraInfo($spell, $effect, $aura); } else { showEffectInfo($spell, $effect, $eff_id); } if ($spell['EffectAmplitude_' . $effect]) { echo '<br>Interval: ' . $spell['EffectAmplitude_' . $effect] / 1000 . ' sec'; } // Спелл if ($triggerId) { $trigger = getSpell($triggerId); if ($trigger) { echo '<table class=no_border><tbody><tr>'; echo '<td>'; show_spell($trigger['id'], $trigger['SpellIconID'], 'spellinfo'); echo '</td>'; echo '<td><a href="?spell=' . $trigger['id'] . '">' . $trigger['SpellName'] . '</a><br>Value: ' . $amount . '</td>'; echo '</tr></tbody></table>'; } else { echo '<br>Err trigger spell id ' . $triggerId; } } else { if ($itemId) { $item = getItem($itemId); if ($item) { global $Quality; $colorname = $item['Quality']; echo "<table class=no_border><tbody><tr>"; echo "<td>"; show_item($item['entry'], $item['displayid'], 'spellinfo'); echo "</td>"; echo "<td><a class={$Quality[$colorname]} href=\"?item={$item['entry']}\">{$item['name']}</a>"; if ($amount > 1) { echo " x" . $amount; } echo "</td>"; echo "</tr></tbody></table>"; } else { echo "<br>Err item id " . $itemId; } } else { if ($radius) { echo "<br>Radius: " . getRadiusText($radius); } if ($amount != 0) { echo "<br>Value: " . $amount; } } } } echo "</td>"; echo "</tr>"; }
function renderItemData($item, $item_data = 0) { global $gBonding, $Quality, $UseorEquip, $game_text; $colorname = $item['Quality']; $bonding = $item['bonding']; $invtype = $item['InventoryType']; $class = $item['class']; $subclass = $item['subclass']; $speed = $item['delay'] / 1000.0; $ssd = 0; $level = 80; $creator = 0; $giftCreator = 0; $random_suffix = 0; $random_prop = 0; $char_data = 0; $stack_count = 1; if ($item_data) { if ($item['ScalingStatValue'] || $item['ScalingStatDistribution']) { $level = getCharacterLevel($item_data[ITEM_FIELD_OWNER]); } if (intval(-$item_data[ITEM_FIELD_RANDOM_PROPERTIES_ID]) > 0) { $random_suffix = getRandomSuffix(intval(-$item_data[ITEM_FIELD_RANDOM_PROPERTIES_ID])); } if (intval($item_data[ITEM_FIELD_RANDOM_PROPERTIES_ID]) > 0) { $random_prop = getRandomProperty(intval($item_data[ITEM_FIELD_RANDOM_PROPERTIES_ID])); } if ($item_data[ITEM_FIELD_CREATOR]) { $creator = getCharacterName($item_data[ITEM_FIELD_CREATOR]); } if ($item_data[ITEM_FIELD_GIFTCREATOR]) { $giftCreator = getCharacterName($item_data[ITEM_FIELD_GIFTCREATOR]); } if ($item_data[ITEM_FIELD_STACK_COUNT]) { $stack_count = $item_data[ITEM_FIELD_STACK_COUNT]; } if ($random_suffix) { $item['name'] = $item['name'] . ' ' . $random_suffix['name']; } else { if ($random_prop) { $item['name'] = $item['name'] . ' ' . $random_prop['name']; } } if ($item_data[ITEM_FIELD_FLAGS] & ITEM_FLAGS_BINDED) { $bonding = -1; } } if ($item['ScalingStatDistribution'] && ($ssd = getScalingStatDistribution($item['ScalingStatDistribution']))) { if ($ssd['maxlevel'] && $level > $ssd['maxlevel']) { $level = $ssd['maxlevel']; } $mask = $item['ScalingStatValue']; $ssv = getScalingStatValues($level); $stat_multi = 0; // Stat multiplier if ($mask & 0x1f) { if ($mask & 1 << 0) { $stat_multi = $ssv['multiplier_1']; } if ($mask & 1 << 1) { $stat_multi = $ssv['multiplier_2']; } if ($mask & 1 << 2) { $stat_multi = $ssv['multiplier_3']; } if ($mask & 1 << 3) { $stat_multi = $ssv['multiplier_4']; } if ($mask & 1 << 4) { $stat_multi = $ssv['multiplier_5']; } } // Armor mod if ($mask & 0x1e0) { if ($mask & 1 << 5) { $item['armor'] = $ssv['multiplier_6']; } if ($mask & 1 << 6) { $item['armor'] = $ssv['multiplier_7']; } if ($mask & 1 << 7) { $item['armor'] = $ssv['multiplier_8']; } if ($mask & 1 << 8) { $item['armor'] = $ssv['multiplier_9']; } } // DPS mod (min = 70% from averange max = 130%) if ($mask & 0x7e00) { if ($mask & 1 << 9) { $dps = $ssv['multiplier_10']; } if ($mask & 1 << 10) { $dps = $ssv['multiplier_11']; } if ($mask & 1 << 11) { $dps = $ssv['multiplier_12']; } if ($mask & 1 << 12) { $dps = $ssv['multiplier_13']; } if ($mask & 1 << 13) { $dps = $ssv['multiplier_14']; } if ($mask & 1 << 14) { $dps = $ssv['multiplier_15']; } $averange = $speed * $dps; $item['dmg_min1'] = floor(0.7 * $averange); $item['dmg_max1'] = floor(1.3 * $averange); } // if ($mask & 0x08000) // spell power // ???=$ssv['multiplier_16']; // if ($mask & 0x10000) // feral AP // ???=$ssv['multiplier_17']; } // Вывод имени echo '<tr><td class=name><SPAN class=' . $Quality[$colorname] . '>' . $item['name'] . '</SPAN></td></tr>'; // Heroic item (green) if ($item['Flags'] & ITEM_FLAGS_HEROIC) { echo '<tr><td class=SpellStat>' . $game_text['item_heroic'] . '</td></tr>'; } if ($item['area']) { echo '<tr><td>' . getAreaName($item['area']) . '</td></tr>'; } if ($item['Map']) { echo '<tr><td>' . getMapName($item['Map']) . '</td></tr>'; } if ($item['Flags'] & ITEM_FLAGS_CONJURED) { echo '<tr><td>' . $game_text['conjured_item'] . '</td></tr>'; } // Вывод привязки вещи if ($bonding) { echo '<tr><td>' . $gBonding[$bonding] . '</td></tr>'; } // Вывод того что вещь содержит чтото if ($item['Flags'] & ITEM_FLAGS_OPENABLE) { echo '<tr><td class=SpellStat>' . $game_text['right_click'] . '</td></tr>'; } // <Right Click to Read> // Вывод уникальности вещи if ($item['maxcount'] == 1) { echo '<tr><td class=Unique>' . $game_text['unique'] . '</td></tr>'; } if ($item['maxcount'] > 1) { echo '<tr><td class=Unique>' . $game_text['unique'] . '(' . $item['maxcount'] . ')</td></tr>'; } $className = getClassName($class, 0); $subClassName = getShortSubclassName($class, $subclass, 0); // Зависимые от класса вещи параметры switch ($class) { // case 0:// Consumable // break; case 1: // Container echo "<tr><td>" . sprintf($game_text['slot'], $item['ContainerSlots'], $subClassName) . "</td></tr>"; break; case 2: // Weapon echo '<tr><td>' . '<div class=right>' . $subClassName . '</div>' . getInventoryType($invtype, 0) . '</td></tr>'; break; //case 3:// Gem //break; //case 3:// Gem //break; case 4: // Armor if ($invtype == 14) { $invtype = 22; } $sub = ''; if ($invtype != 16 && $subclass > 0) { $sub = '<div class=right>' . $subClassName . '</div>'; } echo '<tr><td>' . $sub . getInventoryType($invtype, 0) . '</td></tr>'; break; // case 5:// Reagent // break; // case 5:// Reagent // break; case 6: // Projectile echo '<tr><td><div class=right>' . $subClassName . '</div>' . $className . '</td></tr>'; $dps = ($item['dmg_min1'] + $item['dmg_max1']) / 2; echo '<tr><td>' . sprintf($game_text['ammo_dps'], $dps) . '</td></tr>'; break; // case 7:// Trade Goods // break; // case 8:// Generic // break; // case 9:// Recipe // break; // case 10:// Money // break; // case 7:// Trade Goods // break; // case 8:// Generic // break; // case 9:// Recipe // break; // case 10:// Money // break; case 11: //Quiver echo '<tr><td>' . sprintf($game_text['slot'], $item['ContainerSlots'], $subClassName) . '</td></tr>'; break; // case 12: //Quest // break; // case 13: //Key // break; // case 14: //Permanent // break; // case 15: //Misc // break; // case 12: //Quest // break; // case 13: //Key // break; // case 14: //Permanent // break; // case 15: //Misc // break; default: break; } // Вывод урона наносимого оружием но не боеприпасами if ($item['dmg_min1'] > 0 and $class != 6) { if ($speed == 0) { $speed = 1; } $dps = ($item['dmg_min1'] + $item['dmg_max1']) / (2 * $speed); $sub = '<div class=right>' . sprintf($game_text['weapon_speed'], $speed) . '</div>'; echo '<tr><td>' . $sub . sprintf($game_text['weapon_damage'], $item['dmg_min1'], $item['dmg_max1']) . '</td></tr>'; if ($class == 2) { echo '<tr><td>' . sprintf($game_text['weapon_dps'], $dps) . '</td></tr>'; } } // вывод брони if ($item['armor']) { echo '<tr><td>' . sprintf($game_text['iarmor'], $item['armor']) . '</td></tr>'; } // вывод блока if ($item['block']) { echo '<tr><td>' . sprintf($game_text['iblock'], $item['block']) . '</td></tr>'; } // Вывод статов на силу, ловкость, стамину, интелект, стамину if ($ssd) { for ($i = 1; $i <= 10; $i++) { renderPrimalStat($ssd['statmod_' . $i], $stat_multi * $ssd['modifier_' . $i] / 10000); } } else { for ($i = 1; $i <= $item['StatsCount']; $i++) { renderPrimalStat($item['stat_type' . $i], $item['stat_value' . $i]); } } // Вывод резистов if ($item['holy_res']) { echo "<tr><td>" . getResistanceText(1, $item['holy_res']) . "</td></tr>"; } if ($item['fire_res']) { echo "<tr><td>" . getResistanceText(2, $item['fire_res']) . "</td></tr>"; } if ($item['nature_res']) { echo "<tr><td>" . getResistanceText(3, $item['nature_res']) . "</td></tr>"; } if ($item['frost_res']) { echo "<tr><td>" . getResistanceText(4, $item['frost_res']) . "</td></tr>"; } if ($item['shadow_res']) { echo "<tr><td>" . getResistanceText(5, $item['shadow_res']) . "</td></tr>"; } if ($item['arcane_res']) { echo "<tr><td>" . getResistanceText(6, $item['arcane_res']) . "</td></tr>"; } // Описание камней if ($item['GemProperties']) { $GemProperties = getGemProperties($item['GemProperties']); echo "<tr><td class=SpellStat>{$GemProperties}</td></tr>"; } // Вывод сокетов if ($item_data) { renderSocketed($item['socketColor_1'], $item_data[SOCK_ENCHANTMENT_SLOT]); renderSocketed($item['socketColor_2'], $item_data[SOCK_ENCHANTMENT_SLOT_2]); renderSocketed($item['socketColor_3'], $item_data[SOCK_ENCHANTMENT_SLOT_3]); } else { renderSocket($item['socketColor_1']); renderSocket($item['socketColor_2']); renderSocket($item['socketColor_3']); } // Вывод бонуса сокетов (если есть доп инфо выводим данные из нее) if ($item_data) { // Вывод активного бонуса if ($item_data[BONUS_ENCHANTMENT_SLOT]) { echo '<tr><td class=SpellStat>' . sprintf($game_text['socket_bonus'], getEnchantmentDesc($item_data[BONUS_ENCHANTMENT_SLOT])) . '</td></tr>'; } else { if ($item['socketBonus']) { echo '<tr><td class=disBonus>' . sprintf($game_text['socket_bonus'], getEnchantmentDesc($item['socketBonus'])) . '</td></tr>'; } } } else { if ($item['socketBonus']) { echo '<tr><td class=SpellStat>' . sprintf($game_text['socket_bonus'], getEnchantmentDesc($item['socketBonus'])) . '</td></tr>'; } } // Вывод энчантов вещи if ($item_data) { renderEnchant($item_data, PERM_ENCHANTMENT_SLOT, $random_suffix); renderEnchant($item_data, TEMP_ENCHANTMENT_SLOT, $random_suffix); renderEnchant($item_data, WOTLK_ENCHANTMENT_SLOT, $random_suffix); renderEnchant($item_data, PROP_ENCHANTMENT_SLOT_0, $random_suffix); renderEnchant($item_data, PROP_ENCHANTMENT_SLOT_1, $random_suffix); renderEnchant($item_data, PROP_ENCHANTMENT_SLOT_2, $random_suffix); renderEnchant($item_data, PROP_ENCHANTMENT_SLOT_3, $random_suffix); renderEnchant($item_data, PROP_ENCHANTMENT_SLOT_4, $random_suffix); } else { if ($item['RandomProperty'] or $item['RandomSuffix']) { echo '<tr><td class=SpellStat>' . $game_text['random_enchant'] . '</td></tr>'; } } // Вывод крепкости if ($item_data && $item_data[ITEM_FIELD_MAXDURABILITY] > 0) { echo '<tr><td>' . sprintf($game_text['durability'], $item_data[ITEM_FIELD_DURABILITY], $item_data[ITEM_FIELD_MAXDURABILITY]) . '</td></tr>'; } else { if ($item['MaxDurability'] > 0) { echo '<tr><td>' . sprintf($game_text['durability'], $item['MaxDurability'], $item['MaxDurability']) . '</td></tr>'; } } // Вывод требования расы if ($text = getAllowableRace($item['AllowableRace'])) { echo '<tr><td>' . $game_text['allowable_race'] . ' ' . $text . '</td></tr>'; } // Вывод требований классов if ($text = getAllowableClass($item['AllowableClass'])) { echo '<tr><td>' . $game_text['allowable_class'] . ' ' . $text . '</td></tr>'; } // Вывод времени продолжительности if ($item['Duration']) { if ($item['ExtraFlags'] & 2) { echo '<tr><td>' . sprintf($game_text['idurationr'], getTimeText($item['Duration'])) . '</td></tr>'; } else { echo '<tr><td>' . sprintf($game_text['iduration'], getTimeText($item['Duration'])) . '</td></tr>'; } } // Вывод требования уровня if ($item['RequiredLevel'] > 1) { echo '<tr><td class=req>' . sprintf($game_text['req_level'], $item['RequiredLevel']) . '</td></tr>'; } // Уровень предмета if ($item['ItemLevel']) { echo '<tr><td>' . sprintf($game_text['ilevel'], $item['ItemLevel']) . '</td></tr>'; } // Вывод prospectable если надо 0x40000 if ($item['Flags'] & ITEM_FLAGS_PROSPECTABLE) { echo '<tr><td>' . $game_text['prospectable'] . '</td></tr>'; } // Вывод Millable если надо 0x20000000 if ($item['Flags'] & ITEM_FLAGS_MILLABLE) { echo '<tr><td>' . $game_text['millable'] . '</td></tr>'; } // Вывод требования скила if ($item['RequiredSkill']) { echo '<tr><td class=req>' . sprintf($game_text['req_skill'], getSkillName($item['RequiredSkill']), $item['RequiredSkillRank']) . '</td></tr>'; } // Требование знать спелл if ($item['requiredspell']) { echo '<tr><td class=req>' . $game_text['req_spell'] . ' ' . getSpellName(getSpell($item['requiredspell'])) . '</td></tr>'; } // Требования арена рейтинга "Requires personal arena rating of %d"; -- %d is the rating number required // $item['RequiredCityRank'] ?? // PVP_MEDAL1 = "Protector of Stormwind"; // PVP_MEDAL2 = "Overlord of Orgrimmar"; // PVP_MEDAL3 = "Thane of Ironforge"; // PVP_MEDAL4 = "High Sentinel of Darnassus"; // PVP_MEDAL5 = "Deathlord of the Undercity"; // PVP_MEDAL6 = "Chieftain of Thunderbluff"; // PVP_MEDAL7 = "Avenger of Gnomeregan"; // PVP_MEDAL8 = "Voodoo Boss of Sen'jin"; // Требования репутации -- Required faction reputation to use the item if ($item['RequiredReputationFaction']) { $faction = getFactionName($item['RequiredReputationFaction']); $rank = getReputationRankName($item['RequiredReputationRank']); echo '<tr><td class=faction>' . sprintf($game_text['req_reputation'], $faction, $rank) . '</td></tr>'; } if ($ssd) { echo '<tr><td>' . sprintf($game_text['ssd_req_level'], $ssd['maxlevel'], $level) . '</td></tr>'; } // Вывод статов на силу, ловкость, стамину, интелект, стамину if ($ssd) { for ($i = 1; $i <= 10; $i++) { renderSpellStat($ssd['statmod_' . $i], $stat_multi * $ssd['modifier_' . $i] / 10000); } } else { for ($i = 1; $i <= $item['StatsCount']; $i++) { renderSpellStat($item['stat_type' . $i], $item['stat_value' . $i]); } } if ($item['spellid_1'] != 483 and $item['spellid_1'] != 55884) { renderSpell($item['spellid_1'], $item['spelltrigger_1'], $item_data ? $item_data[ITEM_FIELD_SPELL_CHARGES + 0] : $item['spellcharges_1'], $item['spellcooldown_1'], $item['spellcategory_1'], $item['spellcategorycooldown_1']); renderSpell($item['spellid_2'], $item['spelltrigger_2'], $item_data ? $item_data[ITEM_FIELD_SPELL_CHARGES + 1] : $item['spellcharges_2'], $item['spellcooldown_2'], $item['spellcategory_2'], $item['spellcategorycooldown_2']); renderSpell($item['spellid_3'], $item['spelltrigger_3'], $item_data ? $item_data[ITEM_FIELD_SPELL_CHARGES + 2] : $item['spellcharges_3'], $item['spellcooldown_3'], $item['spellcategory_3'], $item['spellcategorycooldown_3']); renderSpell($item['spellid_4'], $item['spelltrigger_4'], $item_data ? $item_data[ITEM_FIELD_SPELL_CHARGES + 3] : $item['spellcharges_4'], $item['spellcooldown_4'], $item['spellcategory_4'], $item['spellcategorycooldown_4']); renderSpell($item['spellid_5'], $item['spelltrigger_5'], $item_data ? $item_data[ITEM_FIELD_SPELL_CHARGES + 4] : $item['spellcharges_5'], $item['spellcooldown_5'], $item['spellcategory_5'], $item['spellcategorycooldown_5']); } if ($item['itemset']) { $set = getItemSet($item['itemset']); if ($set == 0) { echo '<tr><td class=itemsetname> Unknown set - ' . $item['itemset'] . '</td></tr>'; } else { // Получаем игрока чтобы вывести инфу о сете if ($item_data && ($char = getCharacter($item_data[ITEM_FIELD_OWNER]))) { $char_data = explode(' ', $char['data']); } $text = ""; $count = 0; $itemnum = 0; // Подсчитываем всего вещей в сете (а также если на игроке то сколько из вещей сета на нём) // Одновременно составяем список for ($i = 1; $i < 18; $i++) { if ($setitem = $set['item_' . $i]) { $count++; $name = getItemName($setitem); if (isItemOnPlayer($setitem, $char_data)) { $itemnum++; $text = $text . '<tr><td class=enSetName><a href="?item=' . $setitem . '">' . $name . '</a></td></tr>'; } else { $text = $text . '<tr><td class=disSetName><a href="?item=' . $setitem . '">' . $name . '</a></td></tr>'; } } } echo '<tr><td class=itemsetname><a href="?itemset=' . $set['id'] . '">' . $set['name'] . "</a> ({$itemnum}/{$count})</td></tr>"; if ($set['req_skill']) { echo '<tr><td class=req>' . sprintf($game_text['req_skill'], getSkillName($set['req_skill']), $set['req_skill_value']) . '</td></tr>'; } echo $text; // Выводим бонусы сета (если на игроке - то активны ион или нет) for ($i = 1; $i < 9; $i++) { if ($setSpell = $set['spell_' . $i]) { $name = get_spell_details($setSpell); $num = $set['count_' . $i]; if ($char_data) { $iclass = $num <= $itemnum ? 'enSpell' : 'disSpell'; echo '<tr><td class=' . $iclass . '><a href="?spell=' . $setSpell . '">(' . $num . ') ' . $name . '</a></td></tr>'; } else { echo '<tr><td><a href="?spell=' . $setSpell . '">(' . $num . ') ' . $name . '</a></td></tr>'; } } } } } if ($item['description'] != "") { if ($item['spellid_1'] == 483 or $item['spellid_1'] == 55884) { echo '<tr><td><a href="?spell=' . $item['spellid_2'] . '">' . $UseorEquip[$item['spelltrigger_2']] . ' ' . $item['description'] . '</a></td></tr>'; if ($spell = getSpell($item['spellid_2'])) { if ($ritem = getItem($spell['EffectItemType_1'])) { echo '<tr><td> </td></tr>'; renderItemData($ritem); } if ($req = getRecipeReqString($spell)) { echo '<tr><td> </td></tr>'; echo '<tr><td>' . $game_text['req_ingridients'] . ' ' . $req . '</td></tr>'; } } } else { echo '<tr><td class=itemdesc>"' . $item['description'] . '"</td></tr>'; } } // Written by %s if ($creator) { echo '<tr><td class=enSpell><' . sprintf($game_text['made_by'], $creator) . '></td></tr>'; } if ($item['startquest']) { echo '<tr><td>' . $game_text['start_quest'] . '</td></tr>'; } }
echo "</td></tr>"; } if ($quest['RewMailTemplateId']) { $MailTime = $quest['RewMailDelaySecs'] / 60 / 60; $ItemMail = getItemMail($quest['RewMailTemplateId']); echo "<tr><td class=mark>{$lang['Rew_mail']} {$lang['Mail_item_time']}" . $MailTime . "{$lang['Mail_time']}"; if ($ItemMail) { echo "<tr><td class=mark>{$lang['Rew_item_mail']}</td></tr>"; echo "<tr><td class=reward> "; show_item($ItemMail); } echo "</td></tr>"; } if ($quest['RewSpell'] || $quest['RewSpellCast']) { $learn = $quest['RewSpell'] ? $quest['RewSpell'] : $quest['RewSpellCast']; $spell = getSpell($learn); if ($spell) { $spellName = getSpellName($spell); } else { $spellName = "Spell {$learn}"; } echo '<tr><td class=mark>' . ($quest['RewSpell'] ? $lang['learn_spell'] : $lang['cast_spell']) . '</td></tr>'; echo "<tr><td class=reward> "; show_spell($spell['id'], $spell['SpellIconID']); echo " <a href=\"?spell={$spell['id']}\">{$spell['SpellName']}</a></td></tr>"; } for ($i = 1; $i <= 5; $i++) { switch (ABS($quest['RewRepValueId' . $i])) { case 1: $RepValueId[$i] = 10; break;
function r_glyphName($data) { $spell = getSpell($data['SpellId']); echo $spell['SpellName']; }
} break; // Показ Обьекта // Показ Обьекта case "o": if ($obj = getGameobject($entry)) { include_once "include/gameobject_table.php"; noBorderGameobjectTable($obj); } else { echo "Error object {$entry}"; } break; // Показ спелла // Показ спелла case "s": if ($spell = getSpell($entry)) { noBorderSpellTable($spell); } else { echo "Error spell {$entry}"; } break; // Показ энчанта // Показ энчанта case "e": if ($enc = getEnchantment($entry)) { noBorderEnchantTable($enc); } else { echo "Error enchant {$entry}"; } break; // Показ таланта
function spellReplace($spell) { $text = $spell['Description']; $letter = array('${', '}'); $values = array('[', ']'); $text = str_replace($letter, $values, $text); $signs = array('+', '-', '/', '*', '%', '^'); $data = $text; $pos = 0; $npos = 0; $str = ''; $lastCount = 1; while (false !== ($npos = strpos($data, '$', $pos))) { if ($npos != $pos) { $str .= substr($data, $pos, $npos - $pos); } $pos = $npos + 1; if ('$' == substr($data, $pos, 1)) { $str .= '$'; $pos++; continue; } if (!preg_match('/^((([+\\-\\/*])(\\d+);)?(\\d*)(?:([lg].*?:.*?);|(\\w\\d*)))/', substr($data, $pos), $result)) { continue; } $pos += strlen($result[0]); $op = $result[3]; $oparg = $result[4]; $lookup = $result[5] ? $result[5] : $spell['id']; $var = $result[6] ? $result[6] : $result[7]; if (!$var) { continue; } if ($var[0] == 'l') { $select = explode(':', substr($var, 1)); $str .= @$select[$lastCount == 1 ? 0 : 1]; } else { if ($var[0] == 'g') { $select = explode(':', substr($var, 1)); $str .= $select[0]; } else { $spellData = @$cacheSpellData[$lookup]; if ($spellData == 0) { if ($lookup == $spell['id']) { $cacheSpellData[$lookup] = getSpellData($spell); } else { $cacheSpellData[$lookup] = getSpellData(getSpell($lookup)); } $spellData = @$cacheSpellData[$lookup]; } if ($spellData && ($base = @$spellData[strtolower($var)])) { if ($op && is_numeric($oparg) && is_numeric($base)) { $equation = $base . $op . $oparg; eval("\$base = {$equation};"); } if (is_numeric($base)) { $lastCount = $base; } } else { $base = $var; } $str .= $base; } } } $str .= substr($data, $pos); $str = @preg_replace_callback("/\\[.+[+\\-\\/*\\d]\\]/", 'my_relpace', $str); return $str; }
function includeTalentScript($class, $petId, $maxLevel, $header, $ver = "322") { global $wDB, $game_text, $config; $tab_set = 0; // Create tabs list if ($class) { // For players $tab_set = $wDB->selectCol('SELECT `id` FROM `wowd_talent_tab` WHERE `class_mask` & ?d ORDER BY `tab` ', 1 << $class - 1); } else { if ($petId >= 0) { // For pets (need get pet_talent_type from creature_family) $talent_type = $wDB->selectCell('SELECT `pet_talent_type` FROM `wowd_creature_family` WHERE `category` = ?d', $petId); if (isset($talent_type) && $talent_type >= 0) { $tab_set = $wDB->selectCol('SELECT `id` FROM `wowd_talent_tab` WHERE `pet_mask` & ?d ORDER BY `tab`', 1 << $talent_type); } } } if (!$tab_set) { return; } // Создаём кэш для калькулятора (если его нет или устарел) $data_file = "tc_" . $class . $petId . "_" . $config['lang'] . "_" . $ver . ".js"; if (checkUseCacheJs($data_file, 60 * 60 * 24)) { // Подготаливаем данные для скрипта $tab_name = array(); // Имена веток талантов $tid_to_tab = array(); // Преборазователь TalentId => TabId $tabs = array(); // Тут уже будут данные для JS скрипта $spell_desc = array(); // Тут хранятся описания спеллов $t_row = 0; // Максимум строк $t_col = 0; // Максимум колонок // Стрелки зависимосей описаны тут $arrows = array('0_1' => array('img' => 'right', 'x' => -14, 'y' => 12), '0_-1' => array('img' => 'left', 'x' => 40, 'y' => 12), '1_-1' => array('img' => 'down-left', 'x' => 14, 'y' => -40), '1_0' => array('img' => 'down-1', 'x' => 13, 'y' => -12), '2_0' => array('img' => 'down-2', 'x' => 13, 'y' => -70), '2_1' => array('img' => 'down2-right', 'x' => -13, 'y' => -94), '2_-1' => array('img' => 'down2-left', 'x' => 14, 'y' => -94), '3_0' => array('img' => 'down-3', 'x' => 13, 'y' => -128), '4_0' => array('img' => 'down-4', 'x' => 13, 'y' => -188), '1_1' => array('img' => 'down-right', 'x' => -13, 'y' => -40)); // Получаем данные о ветках из базы и переводим их в нужный формат if ($class) { $ppr = 5; $talents = $wDB->select('SELECT `TalentID` AS ARRAY_KEY, `TalentTab`, `Row`, `Col`, `Rank_1`, `Rank_2`, `Rank_3`, `Rank_4`, `Rank_5`, `DependsOn`, `DependsOnRank` FROM `wowd_talents` WHERE `TalentTab` IN (?a)', $tab_set); } else { if ($petId >= 0) { $ppr = 3; $petMask1 = 0; $petMask2 = 0; if ($petId < 32) { $petMask1 = 1 << $petId; } else { $petMask2 = 1 << $petId - 32; } $talents = $wDB->select('SELECT `TalentID` AS ARRAY_KEY, `TalentTab`, `Row`, `Col`, `Rank_1`, `Rank_2`, `Rank_3`, `Rank_4`, `Rank_5`, `DependsOn`, `DependsOnRank` FROM `wowd_talents` WHERE `TalentTab` IN (?a) AND ((`petflag1`=0 AND `petflag2`=0) OR (`petflag1`& ?d) OR (`petflag2`& ?d))', $tab_set, $petMask1, $petMask2); } } // Заполняем преборазователь TalentId => TabId и Имена веток талантов foreach ($tab_set as $id => $tid) { $tid_to_tab[$tid] = $id; $tab_name[$id] = getTalentName($tid); } foreach ($talents as $id => $t) { $tabId = $tid_to_tab[$t['TalentTab']]; $row = $t['Row']; $col = $t['Col']; $spells = array(); $icon = 0; $max = 0; if ($t_row <= $row) { $t_row = $row + 1; } if ($t_col <= $col) { $t_col = $col + 1; } for ($i = 1; $i < 6; $i++) { $spellid = $t['Rank_' . $i]; if ($spellid == 0) { continue; } $max = $i; $spells[$i - 1] = $spellid; $spell = getSpell($spellid); if ($icon == 0) { $icon = getSpellIconName($spell['SpellIconID']); } $name = $spell['SpellName']; $spell_desc[$spellid] = array('name' => $name, 'desc' => getSpellDesc($spell)); } $tabs[$tabId . '_' . $row . '_' . $col] = array('id' => $id, 'spells' => $spells, 'icon' => $icon, 'max' => $max); if ($t['DependsOn'] && isset($talents[$t['DependsOn']])) { $d = $talents[$t['DependsOn']]; $dx = $t['Row'] - $d['Row']; $dy = $t['Col'] - $d['Col']; $a = $arrows[$dx . "_" . $dy]; $tabs[$tabId . '_' . $row . '_' . $col]['depend'] = array('id' => $tid_to_tab[$d['TalentTab']] . "_" . $d['Row'] . "_" . $d['Col'], 'rank' => $t['DependsOnRank'], 'img' => $a['img'], 'x' => intval($a['x']), 'y' => intval($a['y'])); } else { $depend = 0; } } echo ' var tc_showclass ="' . ($class ? $class : $tab_set[0]) . '"; var tc_name = ' . php2js($tab_name) . '; var tc_tabs = ' . count($tab_set) . '; var tc_row = ' . $t_row . '; var tc_col = ' . $t_col . '; var tc_tab = ' . php2js($tabs) . '; var tc_point_per_row = ' . $ppr . '; var tc_spell_desc = ' . php2js($spell_desc) . '; var lang_rank = "' . $game_text['talent_rank'] . '"; var lang_next_rank = "' . $game_text['talent_next_rank'] . '"; var lang_req_points = "' . $game_text['talent_req_points'] . '";'; flushJsCache($data_file); } echo ' <script type="text/javascript" id = "talent_calc"> var tc_maxlevel = ' . $maxLevel . '; var lang_header = \'' . $header . '\'; </script> <script type="text/javascript" src="js/talent_calc_base.js"></script>'; }
- Этому спеллу обучают за выполненный квест - Обучает тренер - Стартует с помощью другого спелла - Вещи получаемые со спелла - Вещи использующие этот спелл - Энчанты использующие этот спелл - В какой ветке талатнов этот спелл - Глифы использующие этот спелл (wotlk) - Наборы использующие этот спелл - Мобы кастующие этот спелл - Кастуют объекты */ $entry = intval(@$_REQUEST['spell']); $page = intval(@$_REQUEST['page']); $mark = @$_REQUEST['mark']; $spell = getSpell($entry); if (!$spell) { RenderError($lang['spell_not_found']); } else { $baseLink = '?spell=' . $entry; if ($ajaxmode == 0) { if ($lang['www_spell']) { echo "<a href=\"" . sprintf($lang['www_spell'], $entry) . "\" target=\"_blank\"\">" . sprintf($lang['www_spell'], $entry) . "</a><br>"; } $icon = getSpellIcon($spell['SpellIconID']); echo "<table cellspacing=0 celloadding=0 width=500><tbody>"; echo "<tr>"; echo "<td valign=top align=right width=20%>"; echo "<br><a href=\"#\"><img border=0 src='{$icon}' width=64></a></td>"; echo "<td>"; generateSpellTable($spell);