/** * @param int $slot * @param bool $advanced = false * @return array **/ public static function GetEquippedItemInfo($slot, $advanced = false) { if (!self::IsCorrect()) { WoW_Log::WriteError('%s : character was not found.', __METHOD__); return false; } // Try to find cached item... if (isset(self::$cache_item[$slot])) { // ... and return it. return self::$cache_item[$slot]; } if (!isset(self::$m_items[$slot])) { // Slot is empty, just return false. return false; } $item = self::GetItem($slot); if (!$item || !$item->IsCorrect()) { WoW_Log::WriteError('%s : item handler for slot %d is broken.', __METHOD__, $slot); return false; } $info = DB::World()->selectRow("SELECT `Quality`, `displayid`, `socketColor_1`, `socketColor_2`, `socketColor_3` FROM `item_template` WHERE `entry` = %d LIMIT 1", $item->GetEntry()); if (!$info) { WoW_Log::WriteError('%s : item #%d was not found in `item_template` table!', __METHOD__, $item->GetEntry()); return false; } $item_data = array('item_id' => $item->GetEntry(), 'name' => WoW_Items::GetItemName($item->GetEntry()), 'guid' => $item->GetGUID(), 'quality' => $info['Quality'], 'item_level' => $item->GetItemLevel(), 'icon' => WoW_Items::GetItemIcon(0, $info['displayid']), 'slot_id' => $item->GetSlot(), 'enchid' => $item->GetEnchantmentId(), 'g0' => $item->GetSocketInfo(1), 'g1' => $item->GetSocketInfo(2), 'g2' => $item->GetSocketInfo(3), 'can_ench' => !in_array($item->GetSlot(), array(INV_SHIRT, INV_RANGED_RELIC, INV_TABARD, INV_TRINKET_1, INV_TRINKET_2, INV_NECK, INV_OFF_HAND, INV_RING_1, INV_RING_2, INV_NECK, INV_BELT))); if ($advanced) { $item_data['enchant_text'] = ''; $item_data['enchant_quality'] = 2; $item_data['enchant_item'] = 0; $enchantment_info = DB::WoW()->selectRow("\n SELECT\n `DBPREFIX_enchantment`.`text_%s` AS `text`,\n `DBPREFIX_spellenchantment`.`id` AS `spellId`\n FROM `DBPREFIX_enchantment`\n JOIN `DBPREFIX_spellenchantment` ON `DBPREFIX_spellenchantment`.`Value`=`DBPREFIX_enchantment`.`id`\n WHERE `DBPREFIX_enchantment`.`id` = %d LIMIT 1", WoW_Locale::GetLocale(), $item_data['enchid']); if (is_array($enchantment_info)) { $item_data['enchant_text'] = $enchantment_info['text']; $ench_spell = DB::WoW()->selectCell("SELECT `id` FROM `DBPREFIX_spellenchantment` WHERE `Value` = %d", $item_data['enchid']); if ($ench_spell > 0) { $item_data['enchant_item'] = DB::World()->selectCell("SELECT `entry` FROM `item_template` WHERE `spellid_1` = %d OR `spellid_2` = %d OR `spellid_3` = %d LIMIT 1", $ench_spell, $ench_spell, $ench_spell); if ($item_data['enchant_item'] > 0) { $item_ench_name = WoW_Items::GetItemName($item_data['enchant_item']); $matches = array(); $item_data['enchant_text'] = str_replace('- ', null, substr($item_ench_name, strpos($item_ench_name, ' - '))); } } } for ($socket_index = 0; $socket_index < 3; $socket_index++) { $item_data['gem' . $socket_index] = array(); if (isset($item_data['g' . $socket_index]['enchant_id'])) { $item_data['gem' . $socket_index] = WoW_Items::GetSocketInfo($item_data['g' . $socket_index]['enchant_id']); } } } // Create data-item url $data_item = sprintf('i=%d', $item->GetEntry()); if ($item_data['enchid'] > 0) { $data_item .= sprintf('&e=%d', $item_data['enchid']); } for ($i = 0; $i < 3; $i++) { if ($item_data['g' . $i] > 0) { $data_item .= sprintf('&g%d=%d', $i, $item_data['g' . $i]['enchant_id']); } } $data_item .= sprintf('&s=%d&r=%d&cd=%d&md=%d&pl=%d&t=true', $item->GetGUID(), self::GetRealmID(), $item->GetCurrentDurability(), $item->GetMaxDurability(), self::GetLevel()); // Itemset check $itemset_original = $item->GetOriginalItemSetID(); $itemset_changed = $item->GetItemSetID(); $itemsetID = 0; $pieces_string = null; if ($itemset_original > 0) { $itemsetID = $itemset_original; } if ($itemset_changed > 0) { $itemsetID = $itemset_changed; } if ($itemsetID > 0) { $pieces = $item->GetItemSetPieces(); $setpieces = explode(',', $pieces); if (isset($setpieces[1])) { $prev = false; foreach ($setpieces as $piece) { if (self::IsItemEquipped($piece)) { if ($prev) { $pieces_string .= ','; } $pieces_string .= $piece; $prev = true; } } } } $data_item .= sprintf('&set=%s', $pieces_string); $item_data['data-item'] = $data_item; // Add to cache self::$cache_item[$slot] = $item_data; return $item_data; }
} } $sockets_text = null; $socketBonusEnabled = array(); for ($i = 0; $i < 3; $i++) { if ($proto->Socket[$i]['color'] == 0 && !isset($_GET['g' . $i])) { continue; } $sockets_text .= '<li'; if (!isset($_GET['g' . $i])) { $sockets_text .= ' class="color-d4"'; } $sockets_text .= sprintf('> <span class="icon-socket socket-%d">', $proto->Socket[$i]['color']); if (isset($_GET['g' . $i])) { $socket_info = WoW_Items::GetSocketInfo($_GET['g' . $i]); if ($socket_info) { $sockets_text .= sprintf('<a href="%s/wow/' . WoW_Locale::GetLocale() . '/item/%d" class="gem"> <img src="http://eu.battle.net/wow-assets/static/images/icons/18/%s.jpg" alt="" /> <span class="frame"></span> </a> </span> %s', WoW::GetWoWPath(), $socket_info['item'], $socket_info['icon'], $socket_info['text']); if (WoW_Items::IsGemMatchesSocketColor($socket_info['color'], $proto->Socket[$i]['color'])) { $socketBonusEnabled[] = true; } else { $socketBonusEnabled[] = false; } } } else { $sockets_text .= '<span class="empty"></span><span class="frame"></span></span>' . WoW_Locale::GetString('template_item_socket_' . $proto->Socket[$i]['color']);