コード例 #1
0
ファイル: online.php プロジェクト: BACKUPLIB/Infinity_MaNGOS
function onlineMapRenderCallback($data, $x, $y)
{
    $imgX = 16;
    $imgY = 16;
    $x = round($x - $imgX / 2, 0);
    $y = round($y - $imgY / 2, 0);
    $gender = $data['gender'];
    $class = $data['class'];
    $race = $data['race'];
    $level = $data['level'];
    $faction = getPlayerFaction($race);
    $map_name = getMapName($data['map']);
    $area_name = getAreaNameFromPoint($data['map'], $data['position_x'], $data['position_y'], $data['position_z']);
    $img = $faction == 0 ? "gps_icon1.png" : "gps_icon.png";
    $text = "<table class=online_map>";
    $text .= "<tr><td class=" . ($faction == 0 ? "aname" : "hname") . ">" . $data['name'] . "</td></<tr>";
    if ($area_name) {
        $text .= "<tr><td align=center>{$area_name}<br>";
    }
    $text .= "<tr><td align=center>";
    $text .= "<img width=20 src=" . getRaceImage($race, $gender) . "> <img width=20 src=" . getClassImage($class) . "><br>";
    $text .= getRace($race) . "<br>";
    $text .= getClass($class) . "<br>";
    $text .= "Level - {$level}<br>";
    $text .= "</td></tr>";
    $text .= "</table>";
    return '<img src="images/map_points/' . $img . '" class=point style="left: ' . $x . '; top: ' . $y . ';" ' . addTooltip($text) . '>' . "\n";
}
コード例 #2
0
function outInstRow($id, $level, $zone, $comment)
{
    echo "<tr>";
    echo "<td align=center><img src=" . getMapIcon($id) . "></td>";
    echo "<td class=lvl>{$level}</td>";
    echo "<td>&nbsp;<a href=?instance=" . $id . ">" . getMapName($id) . "</a></td>";
    echo "<td>" . getAreaName($zone) . "</td>";
    //    echo "<td>$comment</td>";
    echo "</tr>";
}
コード例 #3
0
function zoneSortSelect()
{
    global $lang, $config, $dDB, $wDB;
    $cacheFilename = 'quest_zone_sort_' . $config['lang'] . '.html';
    if (checkUseCacheHtml($cacheFilename, 24 * 60 * 60)) {
        $zone_sort = $dDB->selectCol("SELECT `ZoneOrSort` FROM `quest_template` GROUP BY `ZoneOrSort`");
        $areas = $wDB->select("SELECT `id` AS ARRAY_KEY, `map_id`, `zone_id`, `name` FROM `wowd_zones` WHERE `id` IN (?a)", $zone_sort);
        $q_zones = array();
        $q_sort = array();
        foreach ($zone_sort as $z) {
            if ($z > 0) {
                $area = @$areas[$z];
                $map = $area['map_id'];
                if (!isset($q_zones[$map])) {
                    $q_zones[$map]['name'] = getMapName($map);
                    $q_zones[$map]['areas'] = array();
                }
                $q_zones[$map]['areas'][$z] = $area['name'];
            } else {
                if ($z < 0) {
                    $q_sort[-$z] = getQuestSort(-$z);
                }
            }
        }
        // Sort it
        uasort($q_zones, 'cmpZones');
        uasort($q_sort, 'strcmp');
        echo '<select name="ZoneID" style="width: 49%">';
        echo '<option value=0>' . $lang['anything'] . '</option>' . "\n";
        foreach ($q_zones as $map => $z) {
            if (count($z['areas']) > 1) {
                uasort($z['areas'], 'strcmp');
                echo '<optgroup label="' . $z['name'] . '">';
                foreach ($z['areas'] as $id => $name) {
                    echo '<option value=' . $id . '>' . $name . '</option>' . "\n";
                }
                echo '</optgroup>';
            } else {
                foreach ($z['areas'] as $id => $name) {
                    echo '<option value=' . $id . '>' . $name . '</option>' . "\n";
                }
            }
        }
        echo "</select>\n";
        echo '<select name="SortID" style="width: 49%">';
        echo '<option value=0>' . $lang['anything'] . '</option>' . "\n";
        foreach ($q_sort as $id => $name) {
            echo '<option value=' . $id . '>' . $name . '</option>' . "\n";
        }
        echo "</select>";
        flushHtmlCache($cacheFilename);
    }
}
コード例 #4
0
<?php

include_once "include/map_data.php";
echo "<script type=\"text/javascript\" src=\"js/mapper.js\"></script>";
$zone = $_REQUEST['location'];
// Передаём клиенту данные о картах
$mapdata = array();
foreach ($gMapCoord as $mapId => $map) {
    $mapdata['m' . $mapId]['header'] = getMapName($mapId);
    $mapdata['m' . $mapId]['imageX'] = $map[5];
    $mapdata['m' . $mapId]['imageY'] = $map[4];
    $mapdata['m' . $mapId]['image'] = "images/map_image/maps/" . $map[6];
}
foreach ($gAreaImagesCoord as $areaId => $area) {
    $mapdata['a' . $areaId]['header'] = $area[1] == 0 ? getMapName($area[0]) : getAreaName($area[1]);
    $mapdata['a' . $areaId]['imageX'] = 1002;
    $mapdata['a' . $areaId]['imageY'] = 668;
    $mapdata['a' . $areaId]['image'] = "images/map_image/areas/" . $area[6];
}
echo "<script type=\"text/javascript\">\nvar data=" . php2js($mapdata) . ";\nfunction renderMap(id)\n{\n    var m = data[id];\n    if (m)\n    {\n        setMapData(m);\n        renderInstance('mapper',0);\n    }\n    else\n        document.getElementById('mapper').innerHTML = 'No map present';\n}\nsetBestScale(1002);\n</script>";
$azeroth = array(14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 32, 34, 35, 36, 37, 38, 39, 40, 301, 341, 382, 480, 462, 463, 499, 502);
$kalimdor = array(13, 4, 9, 11, 41, 42, 43, 61, 81, 101, 121, 141, 161, 181, 182, 201, 241, 261, 281, 321, 362, 381, 471, 464, 476);
$outland = array(466, 465, 467, 473, 475, 477, 478, 479, 481);
$northrend = array(485, 486, 488, 490, 491, 492, 493, 495, 496, 501, 504, 510, 541);
$others = array(401, 443, 461, 482, 512, 540);
echo "<select onchange=\"renderMap(this.value)\">";
foreach ($azeroth as $id) {
    echo "<option value=a" . $id . ">" . getAreaNameFromId($id) . "</option>";
}
echo "</select>";
echo "<select onchange=\"renderMap(this.value)\">";
コード例 #5
0
 function getMapsList()
 {
     $gpsCount = 0;
     $areaList = array();
     $mapsList = array();
     foreach ($this->points as $point) {
         $a = getAreaImageIdFromPoint($point['map'], $point['position_x'], $point['position_y'], $point['position_z']);
         if ($a > 0) {
             @$areaList[$a]++;
         }
         @$mapsList[$point['map']]++;
     }
     $area_keys = array_keys($areaList);
     $maps_keys = array_keys($mapsList);
     $list = array();
     if ($area_keys) {
         foreach ($areaList as $id => $count) {
             $list['area'][] = array('id' => $id, 'text' => getAreaNameFromId($id) . ' - (' . $count . ')');
         }
     }
     if ($mapsList) {
         foreach ($mapsList as $id => $count) {
             if (getRenderGPSMapData($id)) {
                 $gpsCount += $count;
             }
             $list['map'][] = array('id' => $id, 'text' => getMapName($id) . ' - (' . $count . ')');
         }
     }
     if ($gpsCount) {
         $list['gps'][] = array('text' => '(' . $gpsCount . ')');
     }
     return $list;
 }
コード例 #6
0
 /**
  * Function to translate game dependant terms to a readable format
  * Based on game configs in /configs/games
  *
  * @param $xlrDB string currently
  * @param $item integer team
  * @internal param \currently $xlrDB used xlrstats database
  * @internal param \team $item /weapon/map/event/bodypart
  * @return string translated string as configured in /configs/games/
  */
 public function getItemName($xlrDB, $item)
 {
     //config('/classes/xlrstats.server.inc';
     $XlrServer = new XlrServer();
     $gameName = (string) $XlrServer->serverStatus($xlrDB)->Game->attributes()->Name;
     config('games/' . $gameName . '.php');
     if ($item == 'team') {
         $temp = getTeamName();
     } elseif ($item == 'weapon') {
         $temp = getWeaponName();
     } elseif ($item == 'map') {
         $temp = getMapName();
     } elseif ($item == 'event') {
         $temp = getEventName();
     } elseif ($item == 'bodypart') {
         $temp = getBodypartName();
     } else {
         $temp = __('Undefined Item');
     }
     return $temp;
 }
コード例 #7
0
                         if ($bestScale > 0.87 && $bestScale < 1.5) {
                             $bestScale = 1.0;
                         } else {
                             $bestScale = 2.0;
                         }
                     }
                 }
             }
             echo "<script type=\"text/javascript\">setScale({$bestScale});</script>";
         }
         // Сюда будет создана карта скриптом
         echo "<div id=mapper></div>";
         // Записываем данные о карте в Java Script и запускаем вывод данных
         echo "<script type=\"text/javascript\">var data=" . php2js($mapdata) . ";setMapData(data); renderInstance('mapper',0);</script>";
     } else {
         echo $lang['inst_no_map_present'] . getMapName($mapId);
     }
 }
 createReportTab();
 if ($dungeon) {
     //********************************************************************************
     // Creatures on map
     //********************************************************************************
     function r_npcDungeon($data)
     {
         global $lang;
         echo '<a href="?map&npc=' . $data['entry'] . '" onClick="changeSelect(\'c' . $data['entry'] . '\'); return false;">' . $lang['map'] . '</a>';
     }
     $creatures =& new CreatureReportGenerator('position');
     $creatures->addColumnConfig('NPC_REPORT_DUNGEON', array('class' => 'small', 'sort' => '', 'text' => $lang['map'], 'draw' => 'r_npcDungeon', 'sort_str' => '', 'fields' => ''));
     $fields = array('NPC_REPORT_RANK', 'NPC_REPORT_RNAME', 'NPC_REPORT_DUNGEON');
コード例 #8
0
ファイル: show_go.php プロジェクト: BACKUPLIB/Infinity_MaNGOS
 case GAMEOBJECT_TYPE_CAMERA:
     echo "<tr><th>lockId</th><td>" . $obj['data0'] . "</td></tr>";
     echo "<tr><th>cinematicId</th><td>" . $obj['data1'] . "</td></tr>";
     echo "<tr><th>eventID</th><td>" . $obj['data2'] . "</td></tr>";
     echo "<tr><th>openTextID</th><td>" . $obj['data3'] . "</td></tr>";
     break;
 case GAMEOBJECT_TYPE_MAP_OBJECT:
     break;
 case GAMEOBJECT_TYPE_MO_TRANSPORT:
     echo "<tr><th>taxiPathId</th><td>" . $obj['data0'] . "</td></tr>";
     echo "<tr><th>moveSpeed</th><td>" . $obj['data1'] . "</td></tr>";
     echo "<tr><th>accelRate</th><td>" . $obj['data2'] . "</td></tr>";
     echo "<tr><th>startEventID</th><td>" . $obj['data3'] . "</td></tr>";
     echo "<tr><th>stopEventID</th><td>" . $obj['data4'] . "</td></tr>";
     echo "<tr><th>transportPhysics</th><td>" . $obj['data5'] . "</td></tr>";
     echo "<tr><th>mapID</th><td>" . getMapName($obj['data6']) . "</td></tr>";
     break;
 case GAMEOBJECT_TYPE_DUEL_ARBITER:
     break;
 case GAMEOBJECT_TYPE_FISHINGNODE:
     echo "<tr><th>_data0</th><td>" . $obj['data0'] . "</td></tr>";
     echo "<tr><th>lootId</th><td>" . $obj['data1'] . "</td></tr>";
     break;
 case GAMEOBJECT_TYPE_SUMMONING_RITUAL:
     echo "<tr><th>reqParticipants</th><td>" . $obj['data0'] . "</td></tr>";
     echo "<tr><th>spellId</th><td>" . ($obj['data1'] ? getSpellNameFromId($obj['data1']) : "n/a") . "</td></tr>";
     echo "<tr><th>animSpell</th><td>" . $obj['data2'] . "</td></tr>";
     echo "<tr><th>ritualPersistent</th><td>" . $obj['data3'] . "</td></tr>";
     echo "<tr><th>casterTargetSpell</th><td>" . $obj['data4'] . "</td></tr>";
     echo "<tr><th>casterTargetSpellTargets</th><td>" . $obj['data5'] . "</td></tr>";
     echo "<tr><th>castersGrouped</th><td>" . $obj['data6'] . "</td></tr>";
コード例 #9
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>';
    }
}