Пример #1
0
 public function GetVendorsSource($rebuild = false)
 {
     if (!self::$m_item) {
         return false;
     }
     if (isset(self::$m_item_source['vendors']) && is_array(self::$m_item_source['vendors']) && !$rebuild) {
         return self::$m_item_source['vendors'];
     }
     $vendors_count = DB::World()->selectCell("SELECT COUNT(*) FROM `npc_vendor` WHERE `item` = %d", self::$m_item->entry);
     if ($vendors_count == 0) {
         return false;
     }
     $vendors_source = DB::World()->select("\n        SELECT\n        `a`.*,\n        `b`.`name`,\n        `b`.`subname`,\n        `b`.`faction_A`,\n        `b`.`faction_H`,\n        `b`.`minlevel`,\n        `b`.`maxlevel`,\n        `b`.`rank`,\n        `b`.`type`,\n        `c`.`map`,\n        `c`.`position_x`,\n        `c`.`position_y`,\n        `d`.*,\n        %s\n        FROM `npc_vendor` AS `a`\n        LEFT JOIN `creature_template` AS `b` ON `b`.`entry` = `a`.`entry`\n        LEFT JOIN `creature` AS `c` ON `c`.`id` = `a`.`entry`\n        LEFT JOIN `DBPREFIX_extended_cost` AS `d` ON `d`.`id` = ABS(`a`.`ExtendedCost`)\n        %s\n        WHERE `a`.`item` = %d\n        LIMIT 200", WoW_Locale::GetLocaleID() != LOCALE_EN ? sprintf('`e`.`name_loc%d` AS `name_loc`, `e`.`subname_loc%d` AS `subname_loc`', WoW_Locale::GetLocaleID(), WoW_Locale::GetLocaleID()) : 'NULL', WoW_Locale::GetLocaleID() != LOCALE_EN ? 'LEFT JOIN `locales_creature` AS `e` ON `e`.`entry` = `a`.`entry`' : null, self::$m_item->entry);
     if (!$vendors_source) {
         return false;
     }
     $vendors = array();
     $added_vendors = array();
     $added_items = array();
     foreach ($vendors_source as $vendor) {
         if (in_array($vendor['entry'], $added_vendors)) {
             continue;
         }
         // Find zone
         $vendor['areaName'] = null;
         $vendor['areaID'] = 0;
         $zone_info = DB::World()->selectRow("\n            SELECT\n            `a`.`id`,\n            `a`.`area`,\n            `b`.`name_en` AS `areaName_original`,\n            `b`.`name_%s` AS `areaName_locale`\n            FROM `DBPREFIX_zones` AS `a`\n            JOIN `DBPREFIX_areas` AS `b` ON `b`.`id` = `a`.`area`\n            WHERE `a`.`map` = %d AND `a`.`y_min` >= %d AND `a`.`y_max` <= %d AND `a`.`x_min` >= %d AND `a`.`x_max` <= %d\n            LIMIT 1", WoW_Locale::GetLocale(), $vendor['map'], $vendor['position_y'], $vendor['position_y'], $vendor['position_x'], $vendor['position_x']);
         if (is_array($zone_info)) {
             $vendor['areaID'] = $zone_info['area'];
             $vendor['areaName'] = WoW_Locale::GetLocaleID() != LOCALE_EN && $zone_info['areaName_locale'] != null ? $zone_info['areaName_locale'] : $zone_info['areaName_original'];
         }
         $vendor['react_a'] = WoW_Utils::IsFriendlyForFaction($vendor['faction_A'], FACTION_ALLIANCE);
         $vendor['react_h'] = WoW_Utils::IsFriendlyForFaction($vendor['faction_H'], FACTION_HORDE);
         if (isset($vendor['name_loc']) && WoW_Locale::GetLocaleID() != LOCALE_EN && $vendor['name_loc'] != null) {
             $vendor['name'] = $vendor['name_loc'];
             $vendor['subname'] = $vendor['subname_loc'];
             // No check required
         }
         $vendor['ext_cost'] = '[';
         $vendor['ext_cost_items_id'] = array();
         for ($i = 1; $i < 6; ++$i) {
             if ($vendor['item' . $i] > 0 && $vendor['item' . $i . 'count'] > 0) {
                 $vendor['ext_cost'] .= sprintf('[%d, %d],', $vendor['item' . $i], $vendor['item' . $i . 'count']);
                 if (!in_array($vendor['item' . $i], $added_items)) {
                     $vendor['ext_cost_items_id'][] = $vendor['item' . $i];
                     $added_items[] = $vendor['item' . $i];
                 }
             }
         }
         if (is_array($vendor['ext_cost_items_id'])) {
             $vendor['ext_cost_items'] = self::GetBasicItemInfo($vendor['ext_cost_items_id']);
         } else {
             $vendor['ext_cost_items'] = array();
         }
         unset($vendor['ext_cost_items_id']);
         $vendor['ext_cost'] .= ']';
         $vendor['ext_cost'] = str_replace(',]', ']', $vendor['ext_cost']);
         $added_vendors[] = $vendor['entry'];
         $vendors[] = $vendor;
     }
     self::$m_item_source['vendors'] = $vendors;
     unset($vendors, $vendor);
     return self::$m_item_source['vendors'];
 }