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>";
}
Example #4
0
function get_spell_details($spell_id)
{
    $spell = getSpell($spell_id);
    if ($spell) {
        return getSpellDesc($spell);
    }
    return "Spell id - {$spell_id}";
}
Example #5
0
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>";
}
Example #7
0
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>&nbsp;&nbsp;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>&nbsp;</td></tr>';
                    renderItemData($ritem);
                }
                if ($req = getRecipeReqString($spell)) {
                    echo '<tr><td>&nbsp;</td></tr>';
                    echo '<tr><td>' . $game_text['req_ingridients'] . ' ' . $req . '</td></tr>';
                }
            }
        } else {
            echo '<tr><td class=itemdesc>&quot;' . $item['description'] . '&quot;</td></tr>';
        }
    }
    // Written by %s
    if ($creator) {
        echo '<tr><td class=enSpell>&lt;' . sprintf($game_text['made_by'], $creator) . '&gt;</td></tr>';
    }
    if ($item['startquest']) {
        echo '<tr><td>' . $game_text['start_quest'] . '</td></tr>';
    }
}
Example #8
0
     echo "</td></tr>";
 }
 if ($quest['RewMailTemplateId']) {
     $MailTime = $quest['RewMailDelaySecs'] / 60 / 60;
     $ItemMail = getItemMail($quest['RewMailTemplateId']);
     echo "<tr><td class=mark>{$lang['Rew_mail']}&nbsp;{$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>&nbsp;";
         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>&nbsp;";
     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;
     // Показ таланта
Example #11
0
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;
}
Example #12
0
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>';
}
Example #13
0
   - Этому спеллу обучают за выполненный квест
   - Обучает тренер
   - Стартует с помощью другого спелла
   - Вещи получаемые со спелла
   - Вещи использующие этот спелл
   - Энчанты использующие этот спелл
   - В какой ветке талатнов этот спелл
   - Глифы использующие этот спелл (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);