private static function HandleGuildFeed() { if (!self::IsCorrect()) { WoW_Log::WriteError('%s : guild was not found.', __METHOD__); return false; } if (!self::$guild_feed) { self::LoadGuildFeed(); } $feeds_data = array(); $periods = array(WoW_Locale::GetString('template_feed_sec'), WoW_Locale::GetString('template_feed_min'), WoW_Locale::GetString('template_feed_hour')); $today = date('d.m.Y'); $lengths = array(60, 60, 24); $feed_count = 0; foreach (self::$guild_feed as $event) { if ($feed_count >= 25) { break; } $date_string = date('d.m.Y', $event['date']); if ($date_string == $today) { $diff = time() - $event['date']; for ($i = 0; $diff >= $lengths[$i]; $i++) { $diff /= $lengths[$i]; } $diff = round($diff); $date_string = sprintf('%s %s %s', $diff, $periods[$i], WoW_Locale::GetString('template_feed_ago')); } $feed = array(); switch ($event['type']) { case TYPE_ACHIEVEMENT_FEED: $achievement = WoW_Achievements::GetAchievementInfo($event['data']); if (!$achievement) { WoW_Log::WriteLog('%s : wrong feed data (TYPE_ACHIEVEMENT_FEED, achievement ID: %d), ignore.', __METHOD__, $event['data']); continue; } $feed = array('type' => TYPE_ACHIEVEMENT_FEED, 'date' => $date_string, 'id' => $event['data'], 'points' => $achievement['points'], 'name' => $achievement['name'], 'desc' => $achievement['desc'], 'icon' => $achievement['iconname'], 'category' => $achievement['categoryId'], 'charName' => $event['charName'], 'gender' => $event['gender']); break; case TYPE_ITEM_FEED: $item = WoW_Items::GetItemInfo($event['data']); if (!$item) { WoW_Log::WriteLog('%s : wrong feed data (TYPE_ITEM_FEED, item ID: %d), ignore.', __METHOD__, $event['data']); continue; } $item_icon = WoW_Items::GetItemIcon($item['entry'], $item['displayid']); $data_item = null; $feed = array('type' => TYPE_ITEM_FEED, 'date' => $date_string, 'id' => $event['data'], 'name' => WoW_Locale::GetLocale() == 'en' ? $item['name'] : WoW_Items::GetItemName($item['entry']), 'data-item' => $data_item, 'quality' => $item['Quality'], 'icon' => $item_icon, 'charName' => $event['charName'], 'gender' => $event['gender']); break; case TYPE_BOSS_FEED: // Not supported here. continue; default: WoW_Log::WriteError('%s : unknown feed type (%d)!', __METHOD__, $event['type']); continue; } $feeds_data[] = $feed; $feed_count++; } self::$guild_feed_data = $feeds_data; return true; }
private static function HandleSellingItems() { if (self::$selling_count <= 0 || !is_array(self::$myitems_storage)) { return false; } $item_ids = array(); $item_ids_guids = array(); $items_data = array(); foreach (self::$myitems_storage as $item) { $item_ids[] = $item['item_template']; $item_ids_guids[$item['itemguid']] = $item['item_template']; $items_data[$item['itemguid']] = $item; } $items = DB::World()->select("SELECT `entry`, `name`, `Quality`, `displayid` FROM `item_template` WHERE `entry` IN (%s)", $item_ids); if (!$items) { return false; } $items_storage = array(); $displayids = array(); foreach ($items as $item) { $items_storage[$item['entry']] = $item; $displayids[] = $item['displayid']; } $icons = DB::WoW()->select("SELECT `displayid`, `icon` FROM `DBPREFIX_icons` WHERE `displayid` IN (%s)", $displayids); if (!$icons) { return false; } $icons_storage = array(); foreach ($icons as $icon) { $icons_storage[$icon['displayid']] = $icon['icon']; } unset($icons); self::$items_storage = array(); self::$buyout_price = 0; foreach ($item_ids_guids as $item_guid => $item_id) { if (isset($items_storage[$item_id])) { $item = new WoW_Item(WoWConfig::$Realms[WoW_Account::GetActiveCharacterInfo('realmId')]['type']); $item->LoadFromDBByEntry($item_guid, $item_id); $auc_time = $items_data[$item_guid]['time']; $now = time(); $auction_time = 0; if ($now - $auc_time <= 48 * IN_HOURS) { $auction_time = 3; } elseif ($now - $auc_time <= 24 * IN_HOURS) { $auction_time = 2; } elseif ($now - $auc_time <= 12 * IN_HOURS) { $auction_time = 1; } self::$items_storage[] = array('auction_id' => $items_data[$item_guid]['id'], 'guid' => $item_guid, 'id' => $items_storage[$item_id]['entry'], 'quality' => $items_storage[$item_id]['Quality'], 'name' => WoW_Locale::GetLocaleId() == LOCALE_EN ? $items_storage[$item_id]['name'] : WoW_Items::GetItemName($item_id), 'icon' => $icons_storage[$items_storage[$item_id]['displayid']], 'price_raw' => $items_data[$item_guid]['startbid'], 'price' => WoW_Utils::GetMoneyFormat($items_data[$item_guid]['startbid']), 'buyout_raw' => $items_data[$item_guid]['buyoutprice'], 'buyout' => WoW_Utils::GetMoneyFormat($items_data[$item_guid]['buyoutprice']), 'lastbid' => $items_data[$item_guid]['lastbid'], 'count' => $item->GetStackCount(), 'time' => $auction_time); self::$buyout_price += $items_data[$item_guid]['buyoutprice']; } } unset($items, $items_storage, $displayids); return true; }
/** * @return array **/ public function GetSocketInfo($num, $enchant_id_only = false) { if ($num <= 0 || $num > 4) { return 0; } if (isset($this->m_socketInfo[$num])) { return $enchant_id_only ? $this->m_socketInfo[$num]['enchant_id'] : $this->m_socketInfo[$num]; } $data = array(); switch ($this->m_server) { case SERVER_MANGOS: $socketfield = array(1 => ITEM_FIELD_ENCHANTMENT_3_2, 2 => ITEM_FIELD_ENCHANTMENT_4_2, 3 => ITEM_FIELD_ENCHANTMENT_5_2); $socketInfo = $this->GetUInt32Value($socketfield[$num] - 1); break; case SERVER_TRINITY: $socketfield = array(1 => 6, 2 => 9, 3 => 12); $socketInfo = $this->tc_ench[$socketfield[$num]]; break; default: WoW_Log::WriteError('%s : unknown server type (%d)', __METHOD__, $this->m_server); return false; break; } if ($socketInfo > 0) { if ($enchant_id_only) { return $socketInfo; } $gemData = DB::Wow()->selectRow("SELECT `text_%s` AS `text`, `gem` FROM `DBPREFIX_enchantment` WHERE `id`=%d", WoW_Locale::GetLocale(), $socketInfo); $data['enchant_id'] = $socketInfo; $data['item'] = $gemData['gem']; $data['icon'] = WoW_Items::GetItemIcon($data['item']); $data['enchant'] = $gemData['text']; $data['quality'] = DB::World()->selectCell("SELECT `Quality` FROM `item_template` WHERE `entry` = %d", $data['item']); $data['name'] = WoW_Items::GetItemName($data['item']); $data['color'] = DB::Wow()->selectCell("SELECT `color` FROM `DBPREFIX_gemproperties` WHERE `spellitemenchantement`=%d", $socketInfo); $this->m_socketInfo[$num] = $data; // Is it neccessary? return $data; } return false; }
public static function BBCodesToHTML($post_text) { $matches = array(); if (preg_match_all('/\\[item\\=(.+?)\\/]/x', $post_text, $matches)) { $count = count($matches[0]); // Replace [item] tag for ($i = 0; $i < $count; ++$i) { $info = WoW_Items::GetItemInfo(isset($matches[1][$i]) ? str_replace('"', '', $matches[1][$i]) : 0); if (!$info) { continue; } $post_text = str_replace($matches[0][$i], sprintf('<a href="%s/wow/%s/item/%d" class="bml-link-item color-q%d"><span class="icon-frame frame-10"><img src="http://eu.battle.net/wow-assets/static/images/icons/18/%s.jpg"> </span>%s</a>', WoW::GetWoWPath(), WoW_Locale::GetLocale(), $info['entry'], $info['Quality'], WoW_Items::GetItemIcon(0, $info['displayid']), WoW_Items::GetItemName($info['entry'])), $post_text); } } // Replace [quote] tag $post_text = str_replace('[quote', '<blockquote', $post_text); // Replace other tags $post_text = str_replace(array('[', ']', "\n"), array('<', '>', '<br/>'), $post_text); $post_text = str_replace('"', '\\"', $post_text); return $post_text; }
/** * @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; }
$isItemSet = true; $pieces_text = null; for ($i = 1; $i < $totalItemsCount + 1; $i++) { if (in_array($setdata['item' . $i], $setpieces)) { $pieces_text .= sprintf('<li class="indent"><a class="color-tooltip-beige has-tip" href="%s/wow/' . WoW_Locale::GetLocale() . '/item/%d">%s</li>', WoW::GetWoWPath(), $setdata['item' . $i], WoW_Items::GetItemName($setdata['item' . $i])); } else { $pieces_text .= sprintf('<li class="indent"><a class="color-d4 has-tip" href="%s/wow/' . WoW_Locale::GetLocale() . '/item/%d">%s</li>', WoW::GetWoWPath(), $setdata['item' . $i], WoW_Items::GetItemName($setdata['item' . $i])); } } } } else { // Load default itemset if (is_array($setdata)) { $isItemSet = true; for ($i = 1; $i < 6; $i++) { $pieces_text .= sprintf('<li class="indent"><a class="color-d4 has-tip" href="%s/wow/' . WoW_Locale::GetLocale() . '/item/%d">%s</li>', WoW::GetWoWPath(), $setdata['item' . $i], WoW_Items::GetItemName($setdata['item' . $i])); } } } $itemsetbonus = WoW_Items::GetItemSetBonusInfo(DB::WoW()->selectRow("SELECT * FROM `DBPREFIX_itemsetinfo` WHERE `id` = %d", $proto->itemset)); $setbonus_text = null; if (is_array($itemsetbonus)) { foreach ($itemsetbonus as $item_bonus) { $setbonus_text .= sprintf('<li class="%s">(%d) %s</li>', $equippedItemsCount >= $item_bonus['threshold'] ? 'color-tooltip-green' : 'color-d4', $item_bonus['threshold'], sprintf(WoW_Locale::GetString('template_item_set_bonus'), $item_bonus['desc'])); } } echo sprintf('<li> <ul class="item-specs"> <li class="color-tooltip-yellow">%s (%d/5)</li> %s <li class="indent-top"> </li>
' . sprintf(WoW_Locale::GetString('template_character_audit_empty_sockets'), $count_empty_sockets, count($audit[AUDIT_TYPE_EMPTY_SOCKET])) . ' </li>', $empty_sockets_slots); } if (isset($audit[AUDIT_TYPE_NONOPTIMAL_ARMOR]) && is_array($audit[AUDIT_TYPE_NONOPTIMAL_ARMOR]) && WoW_Characters::GetLevel() >= 40) { $nonop_armor_slots = ''; $nonop_armor_slots_js_tpl = '"inappropriateArmorItems": {%s},'; $nonop_armor_count = 0; foreach ($audit[AUDIT_TYPE_NONOPTIMAL_ARMOR] as $tmp) { ++$nonop_armor_count; } echo sprintf('<li data-slots="%d"> <span class="tip">%s</span> </li>', $nonop_armor_count, sprintf(WoW_Locale::GetString('template_character_audit_nonop_armor'), $nonop_armor_count, WoW_Utils::GetAppropriateItemClassForClassID(WoW_Characters::GetClassID()))); } if (isset($audit[AUDIT_TYPE_MISSING_BELT_BUCKLE]) && $audit[AUDIT_TYPE_MISSING_BELT_BUCKLE] == true) { echo sprintf('<li data-slots="5">%s</li>', sprintf(WoW_Locale::GetString('template_character_audit_missing_belt_buckle'), BELT_BUCKLE_ID, WoW_Items::GetItemName(BELT_BUCKLE_ID))); } ?> </ul> <?php if (WoW_Characters::IsAuditPassed()) { echo WoW_Locale::GetString('template_character_audit_passed'); } ?> <script type="text/javascript"> //<![CDATA[ $(document).ready(function() { new Summary.Audit({ <?php echo $unenchanted_items_js . "\n"; echo ' ' . $empty_sockets_js;