2 include_once("spell_data.php");
3 include_once("player_data.php");
5 define('TYPE_ITEM', 3);
6 define('TYPE_CONTAINER', 7);
8 define('ITEM_FIELD_GUID', 0x0000);
9 define('ITEM_FIELD_TYPE', 0x0002);
10 define('ITEM_FIELD_ENTRY', 0x0003);
11 define('ITEM_FIELD_SCALE_X', 0x0004);
12 define('ITEM_FIELD_PADDING', 0x0005);
13 define('ITEM_FIELD_OWNER', 0x0006); // 2 4 1
14 define('ITEM_FIELD_CONTAINED', 0x0008); // 2 4 1
15 define('ITEM_FIELD_CREATOR', 0x000A); // 2 4 1
16 define('ITEM_FIELD_GIFTCREATOR', 0x000C); // 2 4 1
17 define('ITEM_FIELD_STACK_COUNT', 0x000E); // 1 1 20
18 define('ITEM_FIELD_DURATION', 0x000F); // 1 1 20
19 define('ITEM_FIELD_SPELL_CHARGES', 0x0010); // 5 1 20
20 define('ITEM_FIELD_FLAGS', 0x0015); // 1 1 1
21 define('ITEM_FIELD_ENCHANTMENT', 0x0016); // 33 1 1
22 define('PERM_ENCHANTMENT_SLOT', ITEM_FIELD_ENCHANTMENT
);
23 define('TEMP_ENCHANTMENT_SLOT', ITEM_FIELD_ENCHANTMENT+
3);
24 define('SOCK_ENCHANTMENT_SLOT', ITEM_FIELD_ENCHANTMENT+
6);
25 define('SOCK_ENCHANTMENT_SLOT_2', ITEM_FIELD_ENCHANTMENT+
9);
26 define('SOCK_ENCHANTMENT_SLOT_3', ITEM_FIELD_ENCHANTMENT+
12);
27 define('BONUS_ENCHANTMENT_SLOT', ITEM_FIELD_ENCHANTMENT+
15);
28 define('WOTLK_ENCHANTMENT_SLOT', ITEM_FIELD_ENCHANTMENT+
18);
29 define('PROP_ENCHANTMENT_SLOT_0', ITEM_FIELD_ENCHANTMENT+
21); // used with RandomSuffix
30 define('PROP_ENCHANTMENT_SLOT_1', ITEM_FIELD_ENCHANTMENT+
24); // used with RandomSuffix
31 define('PROP_ENCHANTMENT_SLOT_2', ITEM_FIELD_ENCHANTMENT+
27); // used with RandomSuffix and RandomProperty
32 define('PROP_ENCHANTMENT_SLOT_3', ITEM_FIELD_ENCHANTMENT+
30); // used with RandomProperty
33 define('PROP_ENCHANTMENT_SLOT_4', ITEM_FIELD_ENCHANTMENT+
33); // used with RandomProperty
34 define('ITEM_FIELD_PROPERTY_SEED', 0x003A); // 1 1 1
35 define('ITEM_FIELD_SUFFIX_FACTOR', ITEM_FIELD_PROPERTY_SEED
);
36 define('ITEM_FIELD_RANDOM_PROPERTIES_ID', 0x003B); // 1 1 1
37 define('ITEM_FIELD_ITEM_TEXT_ID', 0x003C); // 1 1 4
38 define('ITEM_FIELD_DURABILITY', 0x003D); // 1 1 20
39 define('ITEM_FIELD_MAXDURABILITY', 0x003E); // 1 1 20
40 define('ITEM_FIELD_PAD', 0x003F);
41 define('ITEM_END', 0x0040);
43 define('CONTAINER_FIELD_NUM_SLOTS', ITEM_END +
0x0000); // Size: 1, Type: INT, Flags: PUBLIC
44 define('CONTAINER_ALIGN_PAD', ITEM_END +
0x0001); // Size: 1, Type: BYTES, Flags: NONE
45 define('CONTAINER_FIELD_SLOT_1', ITEM_END +
0x0002); // Size: 72, Type: LONG, Flags: PUBLIC
46 define('CONTAINER_END', ITEM_END +
0x004A);
48 // Флаги поля ITEM_FIELD_FLAGS
49 define('ITEM_FLAGS_BINDED', 0x00000001);
50 define('ITEM_FLAGS_CONJURED', 0x00000002);
51 define('ITEM_FLAGS_OPENABLE', 0x00000004);
52 define('ITEM_FLAGS_WRAPPED', 0x00000008);
53 define('ITEM_FLAGS_HEROIC', 0x00000008);
54 define('ITEM_FLAGS_WRAPPER', 0x00000200); // used or not used wrapper
55 define('ITEM_FLAGS_PARTY_LOOT', 0x00000800); // determines if item is party loot or not
56 define('ITEM_FLAGS_CHARTER', 0x00002000); // arena/guild charter
57 define('ITEM_FLAGS_PROSPECTABLE', 0x00040000);
58 define('ITEM_FLAGS_UNIQUE_EQUIPPED', 0x00080000);
59 define('ITEM_FLAGS_USEABLE_IN_ARENA',0x00200000);
60 define('ITEM_FLAGS_THROWABLE', 0x00400000); // not used in game for check trow possibility, only for item in game tooltip
61 define('ITEM_FLAGS_SPECIALUSE', 0x00800000); //
62 define('ITEM_FLAGS_BOA', 0x08000000); // bind on account
63 define('ITEM_FLAGS_ENCHANTER_SCROLL',0x10000000);
64 define('ITEM_FLAGS_MILLABLE', 0x20000000);
65 define('ITEM_FLAGS_BOP_TRADEABLE', 0x80000000);
67 // Флаги поля ITEM_FIELD_FLAGS2
68 define('ITEM_FLAGS2_HORDE_ONLY', 0x00000001);
69 define('ITEM_FLAGS2_ALLIANCE_ONLY', 0x00000002);
70 define('ITEM_FLAGS2_EXT_COST_REQUIRES_GOLD', 0x00000004);
71 define('ITEM_FLAGS2_NEED_ROLL_DISABLED', 0x00000100);
73 // Флаги BAG_FAMILY_MASK
74 define('BAG_FAMILY_MASK_ARROWS', 0x00000001);
75 define('BAG_FAMILY_MASK_BULLETS', 0x00000002);
76 define('BAG_FAMILY_MASK_SHARDS', 0x00000004);
77 define('BAG_FAMILY_MASK_LEATHERWORKING_SUPP', 0x00000008);
78 define('BAG_FAMILY_MASK_INSCRIPTION_SUPP', 0x00000010);
79 define('BAG_FAMILY_MASK_HERBS', 0x00000020);
80 define('BAG_FAMILY_MASK_ENCHANTING_SUPP', 0x00000040);
81 define('BAG_FAMILY_MASK_ENGINEERING_SUPP', 0x00000080);
82 define('BAG_FAMILY_MASK_KEYS', 0x00000100);
83 define('BAG_FAMILY_MASK_GEMS', 0x00000200);
84 define('BAG_FAMILY_MASK_MINING_SUPP',0x00000400);
85 define('BAG_FAMILY_MASK_SOULBOUND_EQUIPMENT', 0x00000800);
86 define('BAG_FAMILY_MASK_VANITY_PETS',0x00001000);
87 define('BAG_FAMILY_MASK_CURRENCY_TOKENS', 0x00002000);
88 define('BAG_FAMILY_MASK_QUEST_ITEMS', 0x00004000);
90 function getCharacterLevel($character_id)
93 if ($lvl = $cDB->selectCell("SELECT `level` FROM `characters` WHERE `guid`= ?d", $character_id))
98 function renderSpell($spell_id,$spell_trigger,$spell_charges,$spellcolldown,$spellcategorycooldown)
101 if ($spell_id==0) return;
102 $desc = get_spell_details($spell_id);
105 echo '<tr><td><a href="?spell='.$spell_id.'">'.$UseorEquip[$spell_trigger].' '.$desc;
106 if ($spellcolldown>0)
107 echo ' ('.getTimeText($spellcolldown/1000).' cooldown)';
109 if ($spell_charges > 0 && $spell_charges == (int)$spell_charges)
110 echo '<br>'.sprintf($game_text['charges'], $spell_charges);
114 function renderPrimalStat($stat_type,$stat_value)
116 if ($stat_value AND $stat_type >= 0 AND $stat_type < 8)
117 echo '<tr><td>'.getItemBonusText($stat_type,$stat_value).'</td></tr>';
119 function renderSpellStat($stat_type,$stat_value)
121 if ($stat_value AND $stat_type > 8 AND $stat_type < 49)
122 echo '<tr><td class=SpellStat>'.getItemBonusText($stat_type, $stat_value).'</td></tr>';
125 function renderSocket($socket)
128 if ($socket==1) echo '<tr><td class=MetaSock><a href="?s=i&gem=1">'.$game_text['meta_socket'].'</a></td></tr>';
129 if ($socket==2) echo '<tr><td class=RedSock><a href="?s=i&gem=2">'.$game_text['red_socket'].'</a></td></tr>';
130 if ($socket==4) echo '<tr><td class=YellowSock><a href="?s=i&gem=4">'.$game_text['yellow_socket'].'</a></td></tr>';
131 if ($socket==8) echo '<tr><td class=BlueSock><a href="?s=i&gem=8">'.$game_text['blue_socket'].'</a></td></tr>';
133 // Вывод сокета с возможно вставленным камнем
134 function renderSocketed($socket, $sock_gem_enchant)
136 if ($sock_gem_enchant)
138 $sock_enchant = getEnchantment($sock_gem_enchant);
139 $desc ='<a href="?enchant='.$sock_gem_enchant.'">'.$sock_enchant['description'].'</a>';
140 if ($sock_enchant['GemID'])
141 echo '<tr><td class=EnchantSock><img src="'.getItemIconFromItemId($sock_enchant['GemID']).'"> '.$desc.'</td></tr>';
143 echo '<tr><td class=EnchantSock>'.$desc.'</td></tr>';
145 else // Камня нет выводим как обычный сокет
146 renderSocket($socket);
149 function renderEnchant($item_data, $id, $random_suffix)
152 if ($item_data[$id]==0)
154 $desc = getEnchantmentDesc($item_data[$id]);
155 // Имеется рандом суффикс (заменяем $i на рассчётное значение)
159 if ($item_data[$id] == $random_suffix['EnchantID_1']) $i = $random_suffix['Prefix_1'] * $item_data[ITEM_FIELD_SUFFIX_FACTOR
]/10000;
160 if ($item_data[$id] == $random_suffix['EnchantID_2']) $i = $random_suffix['Prefix_2'] * $item_data[ITEM_FIELD_SUFFIX_FACTOR
]/10000;
161 if ($item_data[$id] == $random_suffix['EnchantID_3']) $i = $random_suffix['Prefix_3'] * $item_data[ITEM_FIELD_SUFFIX_FACTOR
]/10000;
162 $desc = str_replace('$i',intval($i),$desc);
164 $time = floor($item_data[$id+
1]/1000/60);
165 $charge = $item_data[$id+
2];
166 echo '<tr><td class=SpellStat>'.$desc;
167 if ($item_data[$id+
1]) echo ' - '.$time.' '.$game_text['min'];
168 if ($item_data[$id+
2]) echo ' ('.sprintf($game_text['charges'], $charge).')';
171 // Одета ли вещь на игроке (если нет данных о игроке выводим как одетую вещь)
172 function isItemOnPlayer($id, $char_eqip)
175 for ($i=0;$i<19;$i++
)
176 if ($char_eqip[PLAYER_VISIBLE_ITEM_1_ENTRYID+
$i*2]==$id) return 1;
180 function noBorderItemTable($item, $item_data=0)
183 $flags2 = getItemFlags2($item['entry']);
184 echo '<table class=item cellspacing=0><tbody>';
185 renderItemData($item, $item_data);
187 if ($flags2 & ITEM_FLAGS2_HORDE_ONLY
) echo '<tr><td>'.$lang['reqirement'].': '.$lang['Horde'].'</td></tr>';
188 if ($flags2 & ITEM_FLAGS2_ALLIANCE_ONLY
) echo '<tr><td>'.$lang['reqirement'].': '.$lang['Alliance'].'</td></tr>';
190 if ($item['SellPrice'])
191 echo '<tr><td class=sellprice> '.$lang['sell_price'].': '.money($item['SellPrice']).'</td></tr>';
193 echo '<tr><td class=sellprice> '.$lang['no_sell_price'].'</td></tr>';
194 // echo '<tr><td class=bottom>This is from MaNGOS database!</td></tr>';
195 echo '</tbody></table>';
198 function generateItemTable($item, $item_data=0)
200 echo '<table class=border cellspacing=0 cellpadding=0><tbody>';
201 echo '<tr><td class=btopl></td><td class=btop></td><td class=btopr></td></tr>';
202 echo '<tr><td class=bl></td><td class=bbody>';
203 noBorderItemTable($item, $item_data);
204 echo '</td><td class=br></td></tr>';
205 echo '<tr><td class=bbottoml></td><td class=bbottom></td><td class=bbottomr></td></tr>';
206 echo '</tbody></table>';
209 function renderItemData($item, $item_data=0)
217 $colorname = $item['Quality'];
218 $bonding = $item['bonding'];
219 $invtype = $item['InventoryType'];
220 $class = $item['class'];
221 $subclass = $item['subclass'];
222 $speed = $item['delay']/1000.00;
233 if ($item['ScalingStatValue'] ||
$item['ScalingStatDistribution'])
234 $level = getCharacterLevel($item_data[ITEM_FIELD_OWNER
]);
236 if (intval(-$item_data[ITEM_FIELD_RANDOM_PROPERTIES_ID
])>0)
237 $random_suffix = getRandomSuffix(intval(-$item_data[ITEM_FIELD_RANDOM_PROPERTIES_ID
]));
238 if (intval($item_data[ITEM_FIELD_RANDOM_PROPERTIES_ID
])>0)
239 $random_prop = getRandomProperty(intval($item_data[ITEM_FIELD_RANDOM_PROPERTIES_ID
]));
241 if ($item_data[ITEM_FIELD_CREATOR
])
242 $creator = getCharacterName($item_data[ITEM_FIELD_CREATOR
]);
243 if ($item_data[ITEM_FIELD_GIFTCREATOR
])
244 $giftCreator = getCharacterName($item_data[ITEM_FIELD_GIFTCREATOR
]);
245 if ($item_data[ITEM_FIELD_STACK_COUNT
])
246 $stack_count = $item_data[ITEM_FIELD_STACK_COUNT
];
248 $item['name']=$item['name'].' '.$random_suffix['name'];
249 else if ($random_prop)
250 $item['name']=$item['name'].' '.$random_prop['name'];
252 if ($item_data[ITEM_FIELD_FLAGS
] & ITEM_FLAGS_BINDED
)
255 if ($item['ScalingStatDistribution'] && ($ssd = getScalingStatDistribution($item['ScalingStatDistribution'])))
257 if ($ssd['maxlevel'] && $level > $ssd['maxlevel'])
258 $level = $ssd['maxlevel'];
259 $mask = $item['ScalingStatValue'];
260 $ssv = getScalingStatValues($level);
265 if ($mask&(1<<0)) $stat_multi = $ssv['multiplier_1'];
266 if ($mask&(1<<1)) $stat_multi = $ssv['multiplier_2'];
267 if ($mask&(1<<2)) $stat_multi = $ssv['multiplier_3'];
268 if ($mask&(1<<3)) $stat_multi = $ssv['multiplier_4'];
269 if ($mask&(1<<4)) $stat_multi = $ssv['multiplier_5'];
274 if ($mask&(1<<5)) $item['armor']=$ssv['multiplier_6'];
275 if ($mask&(1<<6)) $item['armor']=$ssv['multiplier_7'];
276 if ($mask&(1<<7)) $item['armor']=$ssv['multiplier_8'];
277 if ($mask&(1<<8)) $item['armor']=$ssv['multiplier_9'];
279 // DPS mod (min = 70% from averange max = 130%)
282 if ($mask&(1<< 9)) $dps=$ssv['multiplier_10'];
283 if ($mask&(1<<10)) $dps=$ssv['multiplier_11'];
284 if ($mask&(1<<11)) $dps=$ssv['multiplier_12'];
285 if ($mask&(1<<12)) $dps=$ssv['multiplier_13'];
286 if ($mask&(1<<13)) $dps=$ssv['multiplier_14'];
287 if ($mask&(1<<14)) $dps=$ssv['multiplier_15'];
288 $averange = $speed * $dps;
289 $item['dmg_min1'] = floor(0.7*$averange);
290 $item['dmg_max1'] = floor(1.3*$averange);
292 // if ($mask & 0x08000) // spell power
293 // ???=$ssv['multiplier_16'];
294 // if ($mask & 0x10000) // feral AP
295 // ???=$ssv['multiplier_17'];
299 echo '<tr><td class=name><SPAN class='.$Quality[$colorname].'>'.$item['name'].'</SPAN></td></tr>';
301 // Heroic item (green)
302 if ($item['Flags']& ITEM_FLAGS_HEROIC ||
((isset($item['itemset']) && $item['itemset'] > 0 && $item['Flags'] == 4104)) )
303 echo '<tr><td class=SpellStat>'.$game_text['item_heroic'].'</td></tr>';
306 echo '<tr><td>'.getAreaName($item['area']).'</td></tr>';
309 echo '<tr><td>'.getMapName($item['Map']).'</td></tr>';
311 if ($item['Flags'] & ITEM_FLAGS_CONJURED
)
312 echo '<tr><td>'.$game_text['conjured_item'].'</td></tr>';
313 // Вывод привязки вещи
315 echo '<tr><td>'.$gBonding[$bonding].'</td></tr>';
316 // Вывод того что вещь содержит чтото
317 if ($item['Flags' ]& ITEM_FLAGS_OPENABLE
)
318 echo '<tr><td class=SpellStat>'.$game_text['right_click'].'</td></tr>';
319 // <Right Click to Read>
321 // Вывод уникальности вещи
322 if ($item['maxcount']==1)echo '<tr><td class=Unique>'.$game_text['unique'].'</td></tr>';
323 if ($item['maxcount'] >1)echo '<tr><td class=Unique>'.$game_text['unique'].'('.$item['maxcount'].')</td></tr>';
325 $className = getClassName($class, 0);
326 $subClassName = getShortSubclassName($class, $subclass,0);
327 // Зависимые от класса вещи параметры
330 // case 0:// Consumable
333 echo "<tr><td>".sprintf($game_text['slot'],$item['ContainerSlots'], $subClassName)."</td></tr>";
336 echo '<tr><td>'.'<div class=right>'.$subClassName.'</div>'.getInventoryType($invtype,0).'</td></tr>';
341 if ($invtype==14) $invtype=22;
343 if ($invtype!=16 && $subclass > 0)
344 $sub = '<div class=right>'.$subClassName.'</div>';
345 echo '<tr><td>'.$sub.getInventoryType($invtype,0).'</td></tr>';
350 echo '<tr><td><div class=right>'.$subClassName.'</div>'.$className.'</td></tr>';
351 $dps = ($item['dmg_min1']+
$item['dmg_max1'])/2;
352 echo '<tr><td>'.sprintf($game_text['ammo_dps'],$dps).'</td></tr>';
354 // case 7:// Trade Goods
363 echo '<tr><td>'.sprintf($game_text['slot'], $item['ContainerSlots'], $subClassName).'</td></tr>';
369 // case 14: //Permanent
376 // Вывод урона наносимого оружием но не боеприпасами
377 if ($item['dmg_min1'] > 0 AND $class!=6)
379 if ($speed==0)$speed=1;
380 $dps = ($item['dmg_min1']+
$item['dmg_max1'])/(2*$speed);
381 $sub = '<div class=right>'.sprintf($game_text['weapon_speed'],$speed).'</div>';
382 echo '<tr><td>'.$sub.sprintf($game_text['weapon_damage'],$item['dmg_min1'], $item['dmg_max1']).'</td></tr>';
384 echo '<tr><td>'.sprintf($game_text['weapon_dps'],$dps).'</td></tr>';
387 if ($item['armor']) echo '<tr><td>'.sprintf($game_text['iarmor'],$item['armor']).'</td></tr>';
389 if ($item['block']) echo '<tr><td>'.sprintf($game_text['iblock'],$item['block']).'</td></tr>';
390 // Вывод статов на силу, ловкость, стамину, интелект, стамину
392 for ($i=1;$i<=10;$i++
)
393 renderPrimalStat($ssd['statmod_'.$i], $stat_multi * $ssd['modifier_'.$i] / 10000);
395 for ($i=1;$i<=$item['StatsCount'];$i++
)
396 renderPrimalStat($item['stat_type'.$i],$item['stat_value'.$i]);
399 if ($item['holy_res' ]) echo "<tr><td>".getResistanceText(1, $item['holy_res' ])."</td></tr>";
400 if ($item['fire_res' ]) echo "<tr><td>".getResistanceText(2, $item['fire_res' ])."</td></tr>";
401 if ($item['nature_res']) echo "<tr><td>".getResistanceText(3, $item['nature_res'])."</td></tr>";
402 if ($item['frost_res' ]) echo "<tr><td>".getResistanceText(4, $item['frost_res' ])."</td></tr>";
403 if ($item['shadow_res']) echo "<tr><td>".getResistanceText(5, $item['shadow_res'])."</td></tr>";
404 if ($item['arcane_res']) echo "<tr><td>".getResistanceText(6, $item['arcane_res'])."</td></tr>";
406 if ($item['GemProperties'])
408 $GemProperties = getGemProperties($item['GemProperties']);
409 echo "<tr><td class=SpellStat>$GemProperties</td></tr>";
414 renderSocketed($item['socketColor_1'],$item_data[SOCK_ENCHANTMENT_SLOT
]);
415 renderSocketed($item['socketColor_2'],$item_data[SOCK_ENCHANTMENT_SLOT_2
]);
416 renderSocketed($item['socketColor_3'],$item_data[SOCK_ENCHANTMENT_SLOT_3
]);
420 renderSocket($item['socketColor_1']);
421 renderSocket($item['socketColor_2']);
422 renderSocket($item['socketColor_3']);
424 // Вывод бонуса сокетов (если есть доп инфо выводим данные из нее)
427 // Вывод активного бонуса
428 if ($item_data[BONUS_ENCHANTMENT_SLOT
])
429 echo '<tr><td class=SpellStat>'.sprintf($game_text['socket_bonus'], getEnchantmentDesc($item_data[BONUS_ENCHANTMENT_SLOT
])).'</td></tr>';
430 // Вывод не активного бонуса (не выполнены условия)
431 else if ($item['socketBonus'])
432 echo '<tr><td class=disBonus>'.sprintf($game_text['socket_bonus'], getEnchantmentDesc($item['socketBonus'])).'</td></tr>';
434 else if ($item['socketBonus'])
435 echo '<tr><td class=SpellStat>'.sprintf($game_text['socket_bonus'], getEnchantmentDesc($item['socketBonus'])).'</td></tr>';
437 // Вывод энчантов вещи
440 renderEnchant($item_data,PERM_ENCHANTMENT_SLOT
,$random_suffix);
441 renderEnchant($item_data,TEMP_ENCHANTMENT_SLOT
,$random_suffix);
442 renderEnchant($item_data,WOTLK_ENCHANTMENT_SLOT
,$random_suffix);
443 renderEnchant($item_data,PROP_ENCHANTMENT_SLOT_0
,$random_suffix);
444 renderEnchant($item_data,PROP_ENCHANTMENT_SLOT_1
,$random_suffix);
445 renderEnchant($item_data,PROP_ENCHANTMENT_SLOT_2
,$random_suffix);
446 renderEnchant($item_data,PROP_ENCHANTMENT_SLOT_3
,$random_suffix);
447 renderEnchant($item_data,PROP_ENCHANTMENT_SLOT_4
,$random_suffix);
449 else if ($item['RandomProperty'] OR $item['RandomSuffix'])
450 echo '<tr><td class=SpellStat>'.$game_text['random_enchant'].'</td></tr>';
453 if ($item_data && $item_data[ITEM_FIELD_MAXDURABILITY
]>0)
454 echo '<tr><td>'.sprintf($game_text['durability'],$item_data[ITEM_FIELD_DURABILITY
], $item_data[ITEM_FIELD_MAXDURABILITY
]).'</td></tr>';
455 else if ($item['MaxDurability'] > 0)
456 echo '<tr><td>'.sprintf($game_text['durability'], $item['MaxDurability'], $item['MaxDurability']).'</td></tr>';
458 // Вывод требования расы
459 if ($text=getAllowableRace($item['AllowableRace']))
460 echo '<tr><td>'.$game_text['allowable_race'].' '.$text.'</td></tr>';
462 // Вывод требований классов
463 if ($text = getAllowableClass($item['AllowableClass']))
464 echo '<tr><td>'.$game_text['allowable_class'].' '.$text.'</td></tr>';
465 // Вывод времени продолжительности
466 if ($item['Duration'])
468 if ($item['ExtraFlags']&2)
469 echo '<tr><td>'.sprintf($game_text['idurationr'], getTimeText($item['Duration'])).'</td></tr>';
471 echo '<tr><td>'.sprintf($game_text['iduration'], getTimeText($item['Duration'])).'</td></tr>';
473 // Вывод требования уровня
474 if ($item['RequiredLevel'] > 1)
475 echo '<tr><td class=req>'.sprintf($game_text['req_level'], $item['RequiredLevel']).'</td></tr>';
477 if ($item['ItemLevel']) echo '<tr><td>'.sprintf($game_text['ilevel'], $item['ItemLevel']).'</td></tr>';
478 // Вывод prospectable если надо (Prospectable) 0x40000
479 if ($item['Flags'] & ITEM_FLAGS_PROSPECTABLE
)
480 echo '<tr><td>'.$game_text['prospectable'].'</td></tr>';
482 // Вывод Millable если надо 0x20000000
483 if ($item['Flags'] & ITEM_FLAGS_MILLABLE
)
484 echo '<tr><td>'.$game_text['millable'].'</td></tr>';
486 // Вывод требования скила
487 if ($item['RequiredSkill'])
488 echo '<tr><td class=req>'.sprintf($game_text['req_skill'], getSkillName($item['RequiredSkill']), $item['RequiredSkillRank']).'</td></tr>';
490 // Требование знать спелл
491 if ($item['requiredspell'])
492 echo '<tr><td class=req>'.$game_text['req_spell'].' '.getSpellName(getSpell($item['requiredspell'])).'</td></tr>';
494 // Требования арена рейтинга "Requires personal arena rating of %d"; -- %d is the rating number required
495 // $item['RequiredCityRank'] ??
496 // PVP_MEDAL1 = "Protector of Stormwind";
497 // PVP_MEDAL2 = "Overlord of Orgrimmar";
498 // PVP_MEDAL3 = "Thane of Ironforge";
499 // PVP_MEDAL4 = "High Sentinel of Darnassus";
500 // PVP_MEDAL5 = "Deathlord of the Undercity";
501 // PVP_MEDAL6 = "Chieftain of Thunderbluff";
502 // PVP_MEDAL7 = "Avenger of Gnomeregan";
503 // PVP_MEDAL8 = "Voodoo Boss of Sen'jin";
505 // Требования репутации -- Required faction reputation to use the item
506 if ($item['RequiredReputationFaction'])
508 $faction = getFactionName($item['RequiredReputationFaction']);
509 $rank = getReputationRankName($item['RequiredReputationRank']);
510 echo '<tr><td class=faction>'.sprintf($game_text['req_reputation'], $faction, $rank).'</td></tr>';
514 echo '<tr><td>'.sprintf($game_text['ssd_req_level'], $ssd['maxlevel'], $level).'</td></tr>';
515 // Вывод статов на силу, ловкость, стамину, интелект, стамину
517 for ($i=1;$i<=10;$i++
)
518 renderSpellStat($ssd['statmod_'.$i], $stat_multi * $ssd['modifier_'.$i] / 10000);
520 for ($i=1;$i<=$item['StatsCount'];$i++
)
521 renderSpellStat($item['stat_type'.$i],$item['stat_value'.$i]);
523 if ($item['spellid_1'] != 483)
525 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']);
526 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']);
527 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']);
528 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']);
529 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']);
532 if ($item['itemset'])
534 $set=getItemSet($item['itemset']);
535 if ($set==0) echo '<tr><td class=itemsetname> Unknown set - '.$item['itemset'].'</td></tr>';
538 // Получаем игрока чтобы вывести инфу о сете
539 if ($item_data && $char=getCharacter($item_data[ITEM_FIELD_OWNER
]))
540 $char_data = explode(' ',$char['data']);
545 // Подсчитываем всего вещей в сете (а также если на игроке то сколько из вещей сета на нём)
546 // Одновременно составяем список
548 if ($setitem = $set['item_'.$i])
551 $name=getItemName($setitem);
552 if (isItemOnPlayer($setitem, $char_data))
555 $text = $text.'<tr><td class=enSetName><a href="?item='.$setitem.'">'.$name.'</a></td></tr>';
558 $text = $text.'<tr><td class=disSetName><a href="?item='.$setitem.'">'.$name.'</a></td></tr>';
560 echo '<tr><td class=itemsetname><a href="?itemset='.$set['id'].'">'.$set['name']."</a> ($itemnum/$count)</td></tr>";
561 if ($set['req_skill'])
562 echo '<tr><td class=req>'.sprintf($game_text['req_skill'], getSkillName($set['req_skill']), $set['req_skill_value']).'</td></tr>';
564 // Выводим бонусы сета (если на игроке - то активны ион или нет)
566 if ($setSpell = $set['spell_'.$i])
568 $name=get_spell_details($setSpell);
569 $num=$set['count_'.$i];
572 $iclass = ($num<=$itemnum) ?
'enSpell' : 'disSpell';
573 echo '<tr><td class='.$iclass.'><a href="?spell='.$setSpell.'">('.$num.') '.$name.'</a></td></tr>';
576 echo '<tr><td><a href="?spell='.$setSpell.'">('.$num.') '.$name.'</a></td></tr>';
581 if ($item['description'] != "")
583 if ($item['spellid_1'] == 483)
585 echo '<tr><td><a href="?spell='.$item['spellid_2'].'">'.$UseorEquip[$item['spelltrigger_2']].' '.$item['description'].'</a></td></tr>';
586 if ($spell = getSpell($item['spellid_2']))
588 if ($ritem = getItem($spell['EffectItemType_1']))
590 echo '<tr><td> </td></tr>';
591 renderItemData($ritem);
593 if ($req = getRecipeReqString($spell))
595 echo '<tr><td> </td></tr>';
596 echo '<tr><td>'.$game_text['req_ingridients'].' '.$req.'</td></tr>';
601 echo '<tr><td class=itemdesc>"'.$item['description'].'"</td></tr>';
606 echo '<tr><td class=enSpell><'.sprintf($game_text['made_by'], $creator).'></td></tr>';
608 if ($item['startquest'])
609 echo '<tr><td>'.$game_text['start_quest'].'</td></tr>';