Beispiel #1
0
 /**
  * Returns info about last character activity. Requires MaNGOS core patch (tools/character_feed)!
  * $full used only in character-feed.php
  * @category Characters class
  * @example Characters::GetCharacterFeed()
  * @return array
  **/
 public function GetCharacterFeed($full = false)
 {
     if (!$this->guid) {
         $this->Log()->writeError('%s : player guid not defined', __METHOD__);
         return false;
     }
     if ($full) {
         $data = $this->db->select("SELECT * FROM `character_feed_log` WHERE `guid`=? ORDER BY `date` DESC LIMIT 50", $this->guid);
     } else {
         $data = $this->db->select("SELECT * FROM `character_feed_log` WHERE `guid`=? ORDER BY `date` DESC LIMIT 10", $this->guid);
     }
     if (!$data) {
         $this->Log()->writeLog('%s : feed data for player %d (%s) not found!', __METHOD__, $this->guid, $this->name);
         return false;
     }
     $feed_data = array();
     $i = 0;
     // Strings
     $feed_strings = $this->aDB->select("SELECT `id`, `string_" . $this->_locale . "` AS `string` FROM `armory_string` WHERE `id` IN (13, 14, 15, 16, 17, 18)");
     if (!$feed_strings) {
         $this->Log()->writeError('%s : unable to load strings from armory_string (current locale: %s; locId: %d)', __METHOD__, $this->_locale, $this->_loc);
         return false;
     }
     $_strings = array();
     foreach ($feed_strings as $str) {
         $_strings[$str['id']] = $str['string'];
     }
     foreach ($data as $event) {
         $event_date = strtotime($event['date']);
         if (date('d.m.Y') == date('d.m.Y', $event_date)) {
             $sort = 'today';
         } elseif (date('d.m.Y', $event_date) == date('d.m.Y', strtotime('yesterday'))) {
             $sort = 'yesterday';
         } else {
             $sort = 'earlier';
         }
         switch ($event['type']) {
             case TYPE_ACHIEVEMENT_FEED:
                 $send_data = array('achievement' => $event['data'], 'date' => $event_date);
                 $achievement_info = Achievements::GetAchievementInfo($send_data);
                 if (!isset($achievement_info['title']) || !$achievement_info['title'] || empty($achievement_info['title'])) {
                     continue;
                 }
                 if (!isset($achievement_info['points'])) {
                     $achievement_info['points'] = 0;
                 }
                 $feed_data[$i]['event'] = array('type' => 'achievement', 'date' => date('d.m.Y', $event_date), 'time' => date('H:i:s', $event_date), 'id' => $event['data'], 'points' => $achievement_info['points'], 'sort' => $sort);
                 $achievement_info['desc'] = str_replace("'", "\\'", $achievement_info['desc']);
                 $achievement_info['title'] = str_replace("'", "\\'", $achievement_info['title']);
                 $tooltip = sprintf('<div class=\\"myTable\\"\\><img src=\\"wow-icons/_images/51x51/%s.jpg\\" align=\\"left\\" class=\\"ach_tooltip\\" /\\><strong style=\\"color: #fff;\\"\\>%s (%d)</strong\\><br /\\>%s', $achievement_info['icon'], $achievement_info['title'], $achievement_info['points'], $achievement_info['desc']);
                 //$tooltip = sprintf('<div class="myTable"><img src="wow-icons/_images/51x51/%s.jpg" align="left" class="ach_tooltip" /><strong style="color: #fff;">%s (%d)</strong><br />%s', $achievement_info['icon'], $achievement_info['title'], $achievement_info['points'], $achievement_info['desc']);
                 if ($achievement_info['categoryId'] == 81) {
                     // Feats of strenght
                     $feed_data[$i]['title'] = sprintf('%s [%s].', $_strings[14], $achievement_info['title']);
                     $feed_data[$i]['desc'] = sprintf('%s [<a class="achievement staticTip" href="character-achievements.xml?r=%s&amp;cn=%s" onMouseOver="setTipText(\'%s\')">%s</a>]', $_strings[14], urlencode($this->currentRealmInfo['name']), urlencode($this->name), $tooltip, $achievement_info['title']);
                 } else {
                     $points_string = sprintf($_strings[18], $achievement_info['points']);
                     $feed_data[$i]['title'] = sprintf('%s [%s].', $_strings[13], $achievement_info['title']);
                     $feed_data[$i]['desc'] = sprintf('%s [<a class="achievement staticTip" href="character-achievements.xml?r=%s&amp;cn=%s" onMouseOver="setTipText(\'%s\')">%s</a>] %s.', $_strings[13], urlencode($this->currentRealmInfo['name']), urlencode($this->name), $tooltip, $achievement_info['title'], $points_string);
                 }
                 $feed_data[$i]['tooltip'] = $tooltip;
                 break;
             case TYPE_ITEM_FEED:
                 $item = $this->wDB->selectRow("SELECT `displayid`, `InventoryType`, `name`, `Quality` FROM `item_template` WHERE `entry`=? LIMIT 1", $event['data']);
                 if (!$item) {
                     continue;
                 }
                 $item_icon = $this->aDB->selectCell("SELECT `icon` FROM `armory_icons` WHERE `displayid`=?", $item['displayid']);
                 // Is item equipped?
                 $invenory_slots = array(1 => 'head', 2 => 'neck', 3 => 'shoulder', 4 => 'shirt', 5 => 'chest', 6 => 'belt', 7 => 'legs', 8 => 'boots', 9 => 'wrist', 10 => 'gloves', 11 => 'ring', 12 => 'trinket', 13 => 'mainhand', 14 => 'offhand', 15 => 'relic', 16 => 'back', 17 => 'mainhand', 18 => 'bag', 19 => 'tabard', 20 => 'chest', 21 => 'mainhand', 22 => 'offhand', 23 => 'relic', 26 => 'relic', 28 => 'relic');
                 $item_slot = -1;
                 if (isset($invenory_slots[$item['InventoryType']])) {
                     if ($item['InventoryType'] == 11) {
                         $rings = array('ring1', 'ring2');
                         foreach ($rings as $r_slot) {
                             $tmp_id = self::getCharacterEquip($r_slot);
                             if ($tmp_id == $event['data']) {
                                 $item_slot = $item['InventoryType'];
                             }
                         }
                     } elseif ($item['InventoryType'] == 12) {
                         $trinkets = array('trinket1', 'trinket2');
                         foreach ($trinkets as $t_slot) {
                             $tmp_id = self::getCharacterEquip($t_slot);
                             if ($tmp_id == $event['data']) {
                                 $item_slot = $item['InventoryType'];
                             }
                         }
                     } else {
                         $item_id = self::getCharacterEquip($invenory_slots[$item['InventoryType']]);
                         if ($item_id == $event['data']) {
                             $item_slot = $item['InventoryType'];
                         } else {
                             $item_slot = -1;
                         }
                     }
                 }
                 $feed_data[$i]['event'] = array('type' => 'loot', 'date' => date('d.m.Y', $event_date), 'time' => date('H:i:s', $event_date), 'icon' => $item_icon, 'id' => $event['data'], 'slot' => $item_slot, 'sort' => $sort);
                 if ($this->_locale != 'en_gb' && $this->_locale != 'en_us') {
                     $item['name'] = Items::getItemName($event['data']);
                 }
                 $feed_data[$i]['title'] = sprintf('%s [%s].', $_strings[15], $item['name']);
                 $feed_data[$i]['desc'] = sprintf('%s <a class="staticTip itemToolTip" id="i=%d" href="item-info.xml?i=%d"><span class="stats_rarity%d">[%s]</span></a>.', $_strings[15], $event['data'], $event['data'], $item['Quality'], $item['name']);
                 break;
             case TYPE_BOSS_FEED:
                 // Get criterias
                 $achievement_ids = array();
                 $criterias = $this->aDB->select("SELECT `referredAchievement` FROM `armory_achievement_criteria` WHERE `data`=?", $event['data']);
                 if (!$criterias) {
                     // Search for KillCredit
                     $kc_entry = 0;
                     $KillCredit = $this->wDB->selectRow("SELECT `KillCredit1`, `KillCredit2` FROM `creature_template` WHERE `entry`=?", $event['data']);
                     for ($i = 1; $i < 3; $i++) {
                         if ($KillCredit['KillCredit' . $i] > 0) {
                             $kc_entry = $KillCredit['KillCredit' . $i];
                         }
                     }
                     if ($kc_entry == 0) {
                         continue;
                     }
                     $criterias = $this->aDB->select("SELECT `referredAchievement` FROM `armory_achievement_criteria` WHERE `data`=?", $kc_entry);
                     if (!$criterias || !is_array($criterias)) {
                         continue;
                     }
                 }
                 foreach ($criterias as $crit) {
                     $achievement_ids[] = $crit['referredAchievement'];
                 }
                 if (!$achievement_ids || !is_array($achievement_ids)) {
                     continue;
                 }
                 $achievement = $this->aDB->selectRow("SELECT `id`, `name_" . $this->_locale . "` AS `name` FROM `armory_achievement` WHERE `id` IN (?a) AND `flags`=1", $achievement_ids);
                 if (!$achievement || !is_array($achievement)) {
                     continue;
                 }
                 $feed_data[$i]['event'] = array('type' => 'bosskill', 'date' => date('d.m.Y', $event_date), 'time' => date('H:i:s', $event_date), 'id' => $event['data'], 'points' => 0, 'sort' => $sort);
                 $feed_data[$i]['title'] = sprintf('%s [%s] %d %s', $_strings[16], $achievement['name'], $event['counter'], $_strings[17]);
                 $feed_data[$i]['desc'] = sprintf('%d %s.', $event['counter'], $achievement['name']);
                 break;
         }
         $i++;
     }
     return $feed_data;
 }