LOCALE_BAG, 1 => LOCALE_BAG_QUIVER, 2 => LOCALE_BAG_AMMO, 3 => LOCALE_BAG_SOUL, 6 => LOCALE_BAG_HERB, 7 => LOCALE_BAG_ENCHANT, 8 => LOCALE_BAG_ENGINEER);
$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);
// Таблица урона
/**
*
* @param type $min
* @param type $max
* @param type $delay
* @param type $type
* @return type
*/
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 . '
';
}
/**
*
* @param type $str
* @param type $val
* @return type
*/
function green_bonus($str, $val) {
//TODO javascript rating calc
return LOCALE_GBONUS_EQUIP . str_replace('%d', $val, $str);
}
// Типы бонусов
/**
*
* @param type $type
* @param type $value
* @return type
*/
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;
case 38: $green[] = green_bonus(LOCALE_GBONUS_ATTACKPOWER, $value);
return;
case 43: $green[] = green_bonus(LOCALE_GBONUS_RESTOREMANA, $value);
return;
case 44: $green[] = green_bonus(LOCALE_GBONUS_ARMORPENETRATION, $value);
return;
case 45: $green[] = green_bonus(LOCALE_GBONUS_SPELLPOWER, $value);
return;
default: $green[] = green_bonus(LOCALE_GBONUS_UNKNOWN, $type);
return;
}
}
/**
*
* @param type $spell_id
* @return type
*/
function req_spell($spell_id) {
global $DB;
global $UDWBaseconf;
return $DB->selectCell('SELECT spellname' . ' FROM '.$UDWBaseconf['aowow']['db'].'.?_aowow_spell WHERE spellID=?d LIMIT 1', $spell_id);
}
/**
*
* @param type $spell_id
* @param type $trigger
* @return type
*/
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 . '';
}
/**
*
* @param int $Row
* @param type $level
* @return type
*/
function allitemsinfo2(&$Row, $level=0) {
// Empty string
if (!isset($Row['entry']))
return array();
// Global array of information
global $allitems;
// Number of the next element
$num = $Row['entry'];
// Если уже есть
if (isset($allitems[$num]))
return $allitems[$num];
// Подключение к базе
global $DB;
// Записываем id вещи
$allitems[$num]['entry'] = $Row['entry'];
// Ищем иконку
$allitems[$num]['icon'] = trim($Row['iconname'], "\r");
// Качество вещи
if ($Row['quality'] == 7)
$Row['quality'] = 6;
$allitems[$num]['quality'] = $Row['quality'];
// Название вещи вместе с локализацией
$allitems[$num]['name'] = $Row['name'];
// Заполняем инфу о вещи
if ($level > 0) {
$allitems[$num]['info'] = render_item_tooltip($Row);
}
// if($level==1)
return $allitems[$num];
// else
// return;
}
/**
*
* @param type $id
* @return type
*/
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'];
}
/**
*
* @param type $id
* @param type $level
* @return type
*/
function allitemsinfo($id, $level=0) {
global $DB;
global $allitems;
global $item_cols;
global $UDWBaseconf;
if (isset($allitems[$id])) {
return $allitems[$id];
} else {
//TODO $UDWBaseconf['aowow']['db']
$row = $DB->selectRow('
SELECT i.?#
{
, l.name' . ' as `name`
, l.description' . ' as `description`
, ?
}
FROM '.$UDWBaseconf['aowow']['db'].'.?_aowow_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);
}
}
/**
*
* @param type $Row
* @return string
*/
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;
global $UDWBaseconf;
$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'])
//TODO $UDWBaseconf['aowow']['db']
$x .= ' ' . $DB->selectCell('SELECT name' . ' FROM '.$UDWBaseconf['aowow']['db'].'.?_aowow_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 . ' ';
// Различные бонусы
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'])
$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 '.$UDWBaseconf['aowow']['db'].'.?_aowow_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 '.$UDWBaseconf['aowow']['db'].'.?_aowow_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 . ')';
// Перечисление всех составляющих набора
$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 .= '';
// Если требуется скилл
if ($row['skillID']) {
$name = $DB->selectCell('SELECT name' . ' FROM '.$UDWBaseconf['aowow']['db'].'.?_aowow_skill WHERE skillID=?d LIMIT 1', $row['skillID']);
$x .= LOCALE_REQUIRES . ' ' . $name . '';
if ($row['skilllevel'])
$x .= ' (' . $row['skilllevel'] . ')';
$x .= ' ';
}
}
$x .= ' |
';
//SellPrice
$sellgold = floor($Row['SellPrice'] / 10000);
$sellsilver = floor($Row['SellPrice'] % 10000 / 100);
$sellcopper = floor($Row['SellPrice'] % 100);
if($sellgold || $sellsilver || $sellcopper){
$x .= '| Sell Price: ';
if($sellgold){
$x .= ''.$sellgold.'';}
if($sellsilver){
$x .= ''.$sellsilver.'';}
if($sellcopper){
$x .= ''.$sellcopper.'';}
$x .= ' |
';
}
$x .= '
';
return $x;
}
// Функция информации о вещи
/**
*
* @param int $Row
* @param type $level
* @return type
*/
function iteminfo2(&$Row, $level=0) {
global $DB;
global $allitems;
global $spell_cols;
global $object_cols;
global $UDWBaseconf;
if (!isset($Row['entry']))
return array();
$item = array();
// Номер вещи
$item['entry'] = $Row['entry'];
// Название вещи
$item['name'] = $Row['name'];
// Тип вещи
$item['type'] = $Row['InventoryType'];
$item['icon'] = trim($Row['iconname'], "\r");
// Уровень вещи
$item['level'] = $Row['ItemLevel'];
// quality stuff
if ($Row['quality'] == 7)
$Row['quality'] = 6;
$item['quality'] = $Row['quality'];
$item['quality2'] = 6 - $Row['quality'];
// Требуемый уровень вещи:
$item['reqlevel'] = $Row['RequiredLevel'];
// Класс и подкласс вещи
// TODO: немного неверное определение
$item['classs'] = $Row['class'];
$item['subclass'] = $Row['subclass'];
// Иконка вещи
$item['iconname'] = trim($Row['iconname'], "\r");
// Кол-во вещей в пачке
$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;
}
//Classes
$item['classes'] = classes_array($Row['AllowableClass']);
// 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'];
// [NOTE] not used in 1.12
//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);
}
// Открывает:
// Тип замков, для которых этот предмет является ключем:
//TODO $UDWBaseconf['aowow']['db']
$locks_row = $DB->selectCol('
SELECT lockID
FROM '.$UDWBaseconf['aowow']['db'].'.?_aowow_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;
}
// Функция информации о вещи
/**
*
* @param type $id
* @param type $level
* @return type
*/
function iteminfo($id, $level=0) {
global $item_cols;
global $DB;
global $UDWBaseconf;
//TODO $UDWBaseconf['aowow']['db']
$row = $DB->selectRow('
SELECT i.?#, i.entry, maxcount
{
, l.name' . ' as `name`
, l.description' . ' as `description`
, ?
}
FROM '.$UDWBaseconf['aowow']['db'].'.?_aowow_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);
}
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;
global $UDWBaseconf;
return $DB->selectCell('SELECT `text` FROM '.$UDWBaseconf['aowow']['db'].'.?_aowow_itemenchantmet WHERE itemenchantmetID=?d LIMIT 1',$bonus);
}