LOCALE_BAG,1=>LOCALE_BAG_QUIVER,2=>LOCALE_BAG_AMMO,4=>LOCALE_BAG_SOUL,8=>LOCALE_BAG_LEATHER,32=>LOCALE_BAG_HERB,64=>LOCALE_BAG_ENCHANT,128=>LOCALE_BAG_ENGINEER,512=>LOCALE_BAG_GEM,1024=>LOCALE_BAG_MINING);
$rep_levels = array('','','', LOCALE_NEUTRAL, LOCALE_FRIENDLY, LOCALE_HONORED, LOCALE_REVERED, LOCALE_EXALTED);
$bond = array('', '
'.LOCALE_BIND_PICKUP, '
'.LOCALE_BIND_EQUIP, '
'.LOCALE_BIND_SOULBOUND, '
'.LOCALE_BIND_QUEST_ITEM);
$slot = array('',LOCALE_EQUIP_HEAD,LOCALE_EQUIP_NECK,LOCALE_EQUIP_SHOULDER,LOCALE_EQUIP_SHIRT,LOCALE_EQUIP_CHEST,LOCALE_EQUIP_WAIST,LOCALE_EQUIP_LEGS,LOCALE_EQUIP_FEET,LOCALE_EQUIP_WRIST,LOCALE_EQUIP_HANDS,LOCALE_EQUIP_FINGER,LOCALE_EQUIP_TRINKET,LOCALE_EQUIP_ONEHAND,LOCALE_EQUIP_OFFHAND,LOCALE_EQUIP_RANGED,LOCALE_EQUIP_BACK,LOCALE_EQUIP_TWOHAND,LOCALE_EQUIP_UNK0,LOCALE_EQUIP_TABARD,LOCALE_EQUIP_CHEST2,LOCALE_EQUIP_MAINHAND,LOCALE_EQUIP_OFFHAND2,LOCALE_EQUIP_HELDINOFFHAND,LOCALE_EQUIP_PROJECTILE,LOCALE_EQUIP_THROWN,LOCALE_EQUIP_RANGED2,LOCALE_EQUIP_UNK1,LOCALE_EQUIP_RELIC);
$armor_type = array('',LOCALE_ARMOR_CLOTH,LOCALE_ARMOR_LEATHER,LOCALE_ARMOR_MAIL,LOCALE_ARMOR_PLATE,LOCALE_ARMOR_BUCKLER,LOCALE_ARMOR_SHIELD,LOCALE_ARMOR_LIBRAM,LOCALE_ARMOR_IDOL,LOCALE_ARMOR_TOTEM);
$weapon_type = array(LOCALE_WEAPON_AXE1H,LOCALE_WEAPON_AXE2H,LOCALE_WEAPON_BOW,LOCALE_WEAPON_GUN,LOCALE_WEAPON_MACE1H,LOCALE_WEAPON_MACE2H,LOCALE_WEAPON_POLEARM,LOCALE_WEAPON_SWORD1H,LOCALE_WEAPON_SWORD2H,LOCALE_WEAPON_OBSOLETE,LOCALE_WEAPON_STAFF,LOCALE_WEAPON_EXOTIC,LOCALE_WEAPON_EXOTIC2,LOCALE_WEAPON_FIST,LOCALE_WEAPON_MISC,LOCALE_WEAPON_DAGGER,LOCALE_WEAPON_THROWN,LOCALE_WEAPON_SPEAR,LOCALE_WEAPON_CROSSBOW,LOCALE_WEAPON_WAND,LOCALE_WEAPON_FISHINGPOLE);
$projectile_type = array(LOCALE_PROJECTILE_WAND,LOCALE_PROJECTILE_BOLT,LOCALE_PROJECTILE_ARROW,LOCALE_PROJECTILE_BULLET,LOCALE_PROJECTILE_THROWN);
$dmg_typez = array ('',LOCALE_DAMAGE_HOLY,LOCALE_DAMAGE_FIRE,LOCALE_DAMAGE_NATURE,LOCALE_DAMAGE_FROST,LOCALE_DAMAGE_SHADOW,LOCALE_DAMAGE_ARCANE);
// Таблица урона
function inv_dmg($min,$max,$delay,$type)
{
global $dmg_typez;
if ($delay!=0)
return '
'.$min.' - '.$max.LOCALE_DAMAGE_PRE.$dmg_typez[$type].LOCALE_DAMAGE_POST.' | '.LOCALE_SPEED.' '.number_format($delay,2).' |
---|
';
else
return '+'.$min.' - '.$max.LOCALE_DAMAGE_PRE.$dmg_typez[$type].LOCALE_DAMAGE_POST.'
';
}
function green_bonus($str, $val)
{
//TODO
return str_replace('%d', $val, $str);
}
// Типы бонусов
function b_type($type, $value)
{
global $green;
switch($type)
{
// белые статы
case 3: return '+'.$value.LOCALE_STAT_AGILITY.'
'; # 3 - Agility
case 4: return '+'.$value.LOCALE_STAT_STRENGTH.'
'; # 4 - Strength
case 5: return '+'.$value.LOCALE_STAT_INTELLECT.'
'; # 5 - Intellect
case 6: return '+'.$value.LOCALE_STAT_SPIRIT.'
'; # 6 - Spirit
case 7: return '+'.$value.LOCALE_STAT_STAMINA.'
'; # 7 - Stamina
// зеленые статы
case 12: $green[]=green_bonus(LOCALE_GBONUS_DEFENCE, $value); return;
case 13: $green[]=green_bonus(LOCALE_GBONUS_DODGE, $value); return;
case 14: $green[]=green_bonus(LOCALE_GBONUS_PARRY, $value); return;
case 15: $green[]=green_bonus(LOCALE_GBONUS_SHIELDBLOCK, $value); return;
case 18: $green[]=green_bonus(LOCALE_GBONUS_SPELLHIT_RATING, $value); return;
case 19: $green[]=green_bonus(LOCALE_GBONUS_MELEECRIT_RATING, $value); return;
case 20: $green[]=green_bonus(LOCALE_GBONUS_RANGEDCRIT_RATING, $value); return;
case 21: $green[]=green_bonus(LOCALE_GBONUS_SPELLCRIT_RATING, $value); return;
case 30: $green[]=green_bonus(LOCALE_GBONUS_SPELLHASTE_RATING, $value); return;
case 31: $green[]=green_bonus(LOCALE_GBONUS_HIT_RATING, $value); return;
case 32: $green[]=green_bonus(LOCALE_GBONUS_CRIT_RATING, $value); return;
case 35: $green[]=green_bonus(LOCALE_GBONUS_RESILIENCE_RATING, $value); return;
case 36: $green[]=green_bonus(LOCALE_GBONUS_HASTE_RATING, $value); return;
case 37: $green[]=green_bonus(LOCALE_GBONUS_EXPERTISE_RATING, $value); return;
default: $green[]=green_bonus(LOCALE_GBONUS_UNKNOWN, $value); return;
}
}
function socket_type($type)
{
switch($type)
{
case 1:
return ''.LOCALE_SOCKET_META.'';
case 2:
return ''.LOCALE_SOCKET_RED.'';
case 4:
return ''.LOCALE_SOCKET_META.'';
case 8:
return ''.LOCALE_SOCKET_BLUE.'';
default:
return 'Unknown Socket('.$type.')';
}
}
function socket_bonus($bonus)
{
global $DB;
return $DB->selectCell('SELECT `text` FROM ?_itemenchantmet WHERE itemenchantmetID=?d LIMIT 1',$bonus);
}
function req_spell($spell_id)
{
global $DB;
return $DB->selectCell('SELECT `spellname` FROM ?_spell WHERE spellID=?d LIMIT 1', $spell_id);
}
function spell_to_bonus($spell_id, $trigger)
{
$tooltip = spell_desc($spell_id);
if ($tooltip=='_empty_')
return;
if (!$tooltip)
return 'Error in spell_desc for spell '.$spell_id.'';
switch($trigger)
{
case 0:
$t = LOCALE_GBONUS_USE;
break;
case 1:
$t = LOCALE_GBONUS_EQUIP;
break;
case 2:
$t = LOCALE_GBONUS_CHANCEONHIT;
break;
case 6:
// Обучает
return;
break;
default:
$t = 'Error! ';
break;
}
return $t.''.$tooltip.'';
}
function allitemsinfo2(&$Row, $level=0)
{
// Пустая строка
if (!isset($Row['entry']))
return;
// Глобальный массив с информацие о вещях
global $allitems;
// Номер очередного элемента
$num = $Row['entry'];
// Если уже есть
if (isset($allitems[$num]))
return $allitems[$num];
// Подключение к базе
global $DB;
// Записываем id вещи
$allitems[$num]['entry'] = $Row['entry'];
// Ищем иконку
$allitems[$num]['icon'] = $Row['iconname'];
// Качество вещи
$allitems[$num]['quality'] = $Row['quality'];
// Название вещи вместе с локализацией
$allitems[$num]['name'] = !empty($Row['name_loc'])?$Row['name_loc']:$Row['name'];
// Заполняем инфу о вещи
if ($level>0)
{
$allitems[$num]['info'] = render_item_tooltip($Row);
}
// if ($level==1)
return $allitems[$num];
// else
// return;
}
function getitemname($id)
{
global $DB;
$z = $DB->selectRow('
SELECT name {, l.name_loc?d as `name_loc`}
FROM item_template i
{ LEFT JOIN (locales_item l) ON l.entry=i.entry AND ? }
WHERE
i.entry=?
LIMIT 1
',
($_SESSION['locale']>0)? $_SESSION['locale']: DBSIMPLE_SKIP,
($_SESSION['locale']>0)? 1: DBSIMPLE_SKIP,
$id
);
return !empty($z['name_loc'])?$z['name_loc']:$z['name'];
}
function allitemsinfo($id, $level=0)
{
global $DB;
global $allitems;
global $item_cols;
if (isset($allitems[$id]))
{
return $allitems[$id];
} else {
$row = $DB->selectRow('
SELECT i.?#
{
, l.name_loc'.$_SESSION['locale'].' as `name_loc`
, l.description_loc'.$_SESSION['locale'].' as `description_loc`
, ?
}
FROM ?_icons, item_template i
{
LEFT JOIN (locales_item l)
ON l.entry=i.entry AND ?
}
WHERE
i.entry=?
AND id=displayid
LIMIT 1
',
$item_cols[$level],
($_SESSION['locale']>0)? 1: DBSIMPLE_SKIP,
($_SESSION['locale']>0)? 1: DBSIMPLE_SKIP,
$id
);
return allitemsinfo2($row, $level);
}
}
function render_item_tooltip(&$Row)
{
// БД
global $DB;
// Строковые константы
global $resz, $resz_desc, $bag_typez, $bond, $slot, $armor_type, $weapon_type, $projectile_type;
// Зеленый текст
global $green;
// Столбцы для извлечения
global $itemset_col;
$green = array();
$x = '';
// Начальный тег таблицы
$x .= '';
// Название и цвет названия
$x .= ''.(!empty($Row['name_loc'])?$Row['name_loc']:$Row['name']).'';
// Биндинг вещи
$x .= $bond[$Row['bonding']];
// Уникальность вещи
if ($Row['maxcount']==1)
$x .= ' '.LOCALE_UNIQUE;
if ($Row['maxcount']>1)
$x .= ' ('.$Row['maxcount'].')';
if ($Row['startquest'])
$x .= ' '.LOCALE_START_QUEST.'';
// Локация, для которой предназначен этот предмет
if ($Row['Map'])
$x .= ' '.$DB->selectCell('SELECT `name` FROM ?_zones WHERE mapid=?d LIMIT 1', $Row['Map']);;
// Теперь в зависимости от типа предмета
if($Row['ContainerSlots']>1)
$x .= ' '.$Row['ContainerSlots'].LOCALE_SLOT.$bag_typez[$Row['BagFamily']];
if(($Row['class']==4) or ($Row['class']==2) or ($Row['class']==6) or ($Row['class']==7))
{
// Броня (4), Оружие(2), Патроны(6)
// Начало таблицы св-в брони
$x .= '';
$x .= '';
// Слот
$x .= ''.$slot[$Row['InventoryType']].' | ';
// Тип брони
if ($Row['class']==4)
$x .= ''.$armor_type[$Row['subclass']].' | ';
elseif ($Row['class']==2)
$x .= ''.$weapon_type[$Row['subclass']].' | ';
elseif ($Row['class']==6)
$x .= ''.$projectile_type[$Row['subclass']].' | ';
$x .= ' ';
} else {
$x .= ' ';
}
// Урон
$dps=0;
for ($j=1;$j<=5;$j++)
{
$d_type = $Row['dmg_type'.$j];
$d_min = $Row['dmg_min'.$j];
$d_max = $Row['dmg_max'.$j];
if (($d_max>0) and ($Row['class']!=6))
{
$delay = $Row['delay'] / 1000;
if ($delay>0) {$dps = $dps+round(($d_max+$d_min)/(2*$delay),1);}
if ($j>1) {$delay=0;}
$x .= inv_dmg($d_min,$d_max,$delay,$d_type);
} elseif (($d_max>0) and ($Row['class']==6))
{
$x .= LOCALE_DPS_ADDS.' '.number_format((($d_max+$d_min)/2),1).' '.LOCALE_DPS2.' ';
}
}
if ($dps>0)
$x .= '('.number_format($dps,1).' '.LOCALE_DPS.') ';
// Кол-во брони
if ($Row['armor'])
$x .= $Row['armor'].' '.LOCALE_ARMOR.' ';
if ($Row['block'])
$x .= $Row['block'].' '.LOCALE_BLOCK.' ';
if ($Row['GemProperties'])
$x .= $DB->selectCell('SELECT ?_itemenchantmet.text from ?_itemenchantmet, ?_gemproperties WHERE (?_gemproperties.gempropertiesID=?d and ?_itemenchantmet.itemenchantmetID=?_gemproperties.itemenchantmetID)', $Row['GemProperties']).' ';
// Различные бонусы
for ($j=1;$j<=10;$j++)
if (($Row['stat_type'.$j]!=0) and ($Row['stat_value'.$j]!=0))
$x .= b_type($Row['stat_type'.$j], $Row['stat_value'.$j]);
// Бонусы к сопротивлениям магий
foreach ($resz as $j => $RowName)
{
if($Row[$RowName]!=0)
{
$x .= '+'.$Row[$RowName].' '.$resz_desc[$j].' ';
}
}
// Случайные бонусы
if ($Row['RandomProperty'] or $Row['RandomSuffix'])
$green[] = 'Random Bonuses';
// Сокеты
for ($j=1;$j<=3;$j++)
if ($Row['socketColor_'.$j]!=0)
$x .= socket_type($Row['socketColor_'.$j]).' ';
if ($Row['socketBonus'])
$x .= 'Socket Bonus: '.socket_bonus($Row['socketBonus']).' ';
// Состояние
if ($Row['MaxDurability'])
$x .= LOCALE_DURABILITY.' '.$Row['MaxDurability'].' / '.$Row['MaxDurability'].' ';
// Требуемые классы
if (classes($Row['AllowableClass']))
$x .= LOCALE_CLASSES.': '.classes($Row['AllowableClass']).' ';
// Требуемый уровень
if ($Row['RequiredLevel']>1)
$x .= LOCALE_REQUIRES_LEVEL.' '.$Row['RequiredLevel'].' ';
// Требуемый скилл (755 - Jewecrafting)
if (($Row['RequiredSkill']) and ($Row['RequiredSkill']!=755))
{
$x .= LOCALE_REQUIRES.' '.$DB->selectCell('SELECT `name` FROM ?_skill WHERE skillID=?d LIMIT 1',$Row['RequiredSkill']);
if ($Row['RequiredSkillRank'])
$x .= ' ('.$Row['RequiredSkillRank'].')';
$x .= ' ';
}
// Требуемый спелл
if ($Row['requiredspell'])
$x .= LOCALE_REQUIRES.' '.req_spell($Row['requiredspell']).' ';
// Требуемая репутация
if ($Row['RequiredReputationFaction'])
{
require_once ('includes/game.php');
global $rep_levels;
$row = factioninfo($Row['RequiredReputationFaction']);
$x .= LOCALE_REQUIRES.' '.$row['name'].' - '.$rep_levels[$Row['RequiredReputationRank']];
}
$x .= ' |
';
// Спеллы
for ($j=1;$j<=5;$j++)
{
if ($Row['spellid_'.$j])
$green[]=spell_to_bonus($Row['spellid_'.$j], $Row['spelltrigger_'.$j]);
}
// Перебираем все "зеленые" бонусы
$x .= '';
if ($green)
{
foreach ($green as $j => $bonus)
if ($bonus)
$x .= ''.$bonus.' ';
}
if ($Row['description'])
{
if ($Row['spelltrigger_2']==6)
$x .= ''.LOCALE_GBONUS_USE.' '.(!empty($Row['description_loc'])?$Row['description_loc']:$Row['description']).'';
else
$x .= '"'.(!empty($Row['description_loc'])?$Row['description_loc']:$Row['description']).'"';
}
if ($Row['PageText'])
$x .= ' <Right Click To Read>'; // TODO: locale
// Item Set
// Временное хранилище всех вещей;
$x_tmp = '';
$row = $DB->selectRow('SELECT ?# FROM ?_itemset WHERE (item1=?d or item2=?d or item3=?d or item4=?d or item5=?d or item6=?d or item7=?d or item8=?d or item9=?d or item10=?d) LIMIT 1', $itemset_col[1], $Row['entry'], $Row['entry'], $Row['entry'], $Row['entry'], $Row['entry'], $Row['entry'], $Row['entry'], $Row['entry'], $Row['entry'], $Row['entry']);
if ($row)
{
$num = 0; // Кол-во вещей в наборе
for ($i=1;$i<=10;$i++)
{
if ($row['item'.$i] >0)
{
$num++;
$name = getitemname($row['item'.$i]);
$x_tmp .= ''.$name.' ';
}
}
$x .= ''.$row['name'].' (0/'.$num.')';
// Если требуется скилл
if ($row['skillID'])
{
$name = $DB->selectCell('SELECT `name` FROM ?_skill WHERE skillID=?d LIMIT 1', $row['skillID']);
$x .= LOCALE_REQUIRES.' '.$name.'';
if ($row['skilllevel'])
$x .= ' ('.$row['skilllevel'].')';
$x .= ' ';
}
// Перечисление всех составляющих набора
$x .= ''.$x_tmp.' ';
// Перечисление всех бонусов набора
$x .= '';
$num = 0;
for ($j=1;$j<=8;$j++)
if ($row['spell'.$j])
{
$itemset['spells'][$num]['entry'] = $row['spell'.$j];
$itemset['spells'][$num]['tooltip'] = spell_desc($row['spell'.$j]);
$itemset['spells'][$num]['bonus'] = $row['bonus'.$j];
$num++;
}
// Сортировка бонусов
$x .= '';
for ($i=0;$i<$num;$i++)
{
for ($j=$i;$j<=$num-1;$j++)
if ($itemset['spells'][$j]['bonus'] < $itemset['spells'][$i]['bonus'])
{
UnSet($tmp);
$tmp = $itemset['spells'][$i];
$itemset['spells'][$i] = $itemset['spells'][$j];
$itemset['spells'][$j] = $tmp;
}
$x .= '('.$itemset['spells'][$i]['bonus'].') Set: '.$itemset['spells'][$i]['tooltip'].' ';
}
$x .= '';
}
$x .= ' |
';
return $x;
}
// Функция информации о вещи
function iteminfo2(&$Row, $level=0)
{
global $DB;
global $allitems;
global $spell_cols;
global $object_cols;
if (!isset($Row['entry']))
return;
$item = array();
// Номер вещи
$item['entry'] = $Row['entry'];
// Название вещи
$item['name'] = !empty($Row['name_loc'])?$Row['name_loc']:$Row['name'];
// Тип вещи
$item['type'] = $Row['InventoryType'];
$item['icon'] = $Row['iconname'];
// Уровень вещи
$item['level'] = $Row['ItemLevel'];
// Качество вещи...
$item['quality'] = $Row['quality'];
$item['quality2'] = 6 - $Row['quality'];
// Требуемый уровень вещи:
$item['reqlevel'] = $Row['RequiredLevel'];
// Класс и подкласс вещи
// TODO: немного неверное определение
$item['classs'] = $Row['class'];
$item['subclass'] = $Row['subclass'];
// Иконка вещи
$item['iconname'] = $Row['iconname'];
// Кол-во вещей в пачке
$item['stackable'] = $Row['stackable'];
// Стоимость вещи для покупки
// DPS
$dps = 0;
if ($Row['class']==2)
{
for ($i=1;$i<=5;$i++)
{
$d_type = $Row['dmg_type'.$i];
$d_min = $Row['dmg_min'.$i];
$d_max = $Row['dmg_max'.$i];
if (($d_max>0) and ($Row['class']!=6))
{
$delay = $Row['delay'] / 1000;
if ($delay>0) {$dps = $dps+round(($d_max+$d_min)/(2*$delay),1);}
}
}
$item['dps'] = $dps;
$item['speed'] = $Row['delay']/1000;
if (!$item['speed']) $item['speed'] = -1;
}
// Armor
$item['armor'] = $Row['armor'];
$item['slot'] = $Row['InventoryType'];
// Bag
if ($Row['class']==1)
$item['slots'] = $Row['ContainerSlots'];
// Добавляем в глобальный массив allitems
allitemsinfo2($Row, 0);
if ($level>0)
{
$item['BuyPrice'] = $Row['BuyPrice'];
//
$item['BagFamily'] = $Row['BagFamily'];
$item['ContainerSlots'] = $Row['ContainerSlots'];
$item['DisenchantID'] = $Row['DisenchantID'];
// Навык энчанта для разборки вещи
if ($Row['RequiredDisenchantSkill']!=-1)
$item['disenchantskill'] = $Row['RequiredDisenchantSkill'];
// Цена на продажу
$item['sellgold'] = floor($Row['SellPrice']/10000);
$item['sellsilver'] = floor($Row['SellPrice']%10000/100);
$item['sellcopper'] = floor($Row['SellPrice']%100);
// Цена за покупку
$item['buygold'] = floor($Row['BuyPrice']/10000);
$item['buysilver'] = floor($Row['BuyPrice']%10000/100);
$item['buycopper'] = floor($Row['BuyPrice']%100);
// Начинает квест
if($Row['startquest'])
$item['starts'] = array(GetDBQuestInfo($Row['startquest'], 0xFFFFFF));
// Информационное окно
$item['info'] = render_item_tooltip($Row);
// Обучает
$teaches = array();
for ($j=1;$j<=4;$j++)
if ($Row['spellid_'.$j]==483)
$teaches[] = spellinfo($Row['spellid_'.($j+1)]);
if ($teaches)
{
$item['teaches'] = $teaches;
unset ($teaches);
unset ($spellrow);
}
// Открывает:
// Тип замков, для которых этот предмет является ключем:
$locks_row = $DB->selectCol('
SELECT lockID
FROM ?_lock
WHERE
(type1=1 AND lockproperties1=?d) OR
(type2=1 AND lockproperties2=?d) OR
(type3=1 AND lockproperties3=?d) OR
(type4=1 AND lockproperties4=?d) OR
(type5=1 AND lockproperties5=?d)
',
$item['entry'], $item['entry'], $item['entry'], $item['entry'], $item['entry']
);
if ($locks_row)
{
// Игровые объекты с таким типом замка:
$item['unlocks'] = $DB->select('
SELECT ?#
FROM gameobject_template
WHERE
(
((type IN (?a)) AND (data0 IN (?a)))
OR
((type IN (?a)) AND (data0 IN (?a)))
)
',
$object_cols[0],
array(GAMEOBJECT_TYPE_QUESTGIVER, GAMEOBJECT_TYPE_CHEST, GAMEOBJECT_TYPE_TRAP, GAMEOBJECT_TYPE_GOOBER, GAMEOBJECT_TYPE_CAMERA, GAMEOBJECT_TYPE_FLAGSTAND, GAMEOBJECT_TYPE_FLAGDROP),
$locks_row,
array(GAMEOBJECT_TYPE_DOOR, GAMEOBJECT_TYPE_BUTTON),
$locks_row
);
if (!($item['unlocks']))
unset ($item['unlocks']);
}
unset ($locks_row);
}
return $item;
}
// Функция информации о вещи
function iteminfo($id, $level=0)
{
global $item_cols;
global $DB;
$row = $DB->selectRow('
SELECT i.?#, i.entry, maxcount
{
, l.name_loc'.$_SESSION['locale'].' as `name_loc`
, l.description_loc'.$_SESSION['locale'].' as `description_loc`
, ?
}
FROM ?_icons, item_template i
{ LEFT JOIN (locales_item l) ON l.entry=i.entry AND ? }
WHERE
(i.entry=?d and id=displayid)
LIMIT 1
',
$item_cols[2+$level],
($_SESSION['locale']>0)? 1: DBSIMPLE_SKIP,
($_SESSION['locale']>0)? 1: DBSIMPLE_SKIP,
$id
);
return iteminfo2($row, $level);
}
?>