コード例 #1
0
ファイル: item.class.php プロジェクト: saqar/aowow
 public function initSubItems()
 {
     if (!array_keys($this->templates)) {
         return;
     }
     $subItemIds = [];
     foreach ($this->iterate() as $__) {
         if ($_ = $this->getField('randomEnchant')) {
             $subItemIds[abs($_)] = $_;
         }
     }
     if (!$subItemIds) {
         return;
     }
     // remember: id < 0: randomSuffix; id > 0: randomProperty
     $subItemTpls = DB::World()->select('
         SELECT CAST( entry as SIGNED) AS ARRAY_KEY, CAST( ench as SIGNED) AS ARRAY_KEY2, chance FROM item_enchantment_template WHERE entry IN (?a) UNION
         SELECT CAST(-entry as SIGNED) AS ARRAY_KEY, CAST(-ench as SIGNED) AS ARRAY_KEY2, chance FROM item_enchantment_template WHERE entry IN (?a)', array_keys(array_filter($subItemIds, function ($v) {
         return $v > 0;
     })) ?: [0], array_keys(array_filter($subItemIds, function ($v) {
         return $v < 0;
     })) ?: [0]);
     $randIds = [];
     foreach ($subItemTpls as $tpl) {
         $randIds = array_merge($randIds, array_keys($tpl));
     }
     if (!$randIds) {
         return;
     }
     $randEnchants = DB::Aowow()->select('SELECT *, id AS ARRAY_KEY FROM ?_itemrandomenchant WHERE id IN (?a)', $randIds);
     $enchIds = array_unique(array_merge(array_column($randEnchants, 'enchantId1'), array_column($randEnchants, 'enchantId2'), array_column($randEnchants, 'enchantId3'), array_column($randEnchants, 'enchantId4'), array_column($randEnchants, 'enchantId5')));
     $enchants = new EnchantmentList(array(['id', $enchIds], CFG_SQL_LIMIT_NONE));
     foreach ($enchants->iterate() as $eId => $_) {
         $this->rndEnchIds[$eId] = array('text' => $enchants->getField('name', true), 'stats' => $enchants->getStatGain());
     }
     foreach ($this->iterate() as $mstItem => $__) {
         if (!$this->getField('randomEnchant')) {
             continue;
         }
         if (empty($subItemTpls[$this->getField('randomEnchant')])) {
             continue;
         }
         foreach ($subItemTpls[$this->getField('randomEnchant')] as $subId => $data) {
             if (empty($randEnchants[$subId])) {
                 continue;
             }
             $data = array_merge($randEnchants[$subId], $data);
             $jsonEquip = [];
             $jsonText = [];
             for ($i = 1; $i < 6; $i++) {
                 $enchId = $data['enchantId' . $i];
                 if ($enchId <= 0 || empty($this->rndEnchIds[$enchId])) {
                     continue;
                 }
                 if ($data['allocationPct' . $i] > 0) {
                     $qty = intVal($data['allocationPct' . $i] * $this->generateEnchSuffixFactor());
                     $stats = array_fill_keys(array_keys($this->rndEnchIds[$enchId]['stats']), $qty);
                     $jsonText[$enchId] = str_replace('$i', $qty, $this->rndEnchIds[$enchId]['text']);
                     Util::arraySumByKey($jsonEquip, $stats);
                 } else {
                     $jsonText[$enchId] = $this->rndEnchIds[$enchId]['text'];
                     Util::arraySumByKey($jsonEquip, $this->rndEnchIds[$enchId]['stats']);
                 }
             }
             $this->subItems[$mstItem][$subId] = array('name' => Util::localizedString($data, 'name'), 'enchantment' => $jsonText, 'jsonequip' => $jsonEquip, 'chance' => $data['chance']);
         }
         if (!empty($this->subItems[$mstItem])) {
             $this->json[$mstItem]['subitems'] = $this->subItems[$mstItem];
         }
     }
 }
コード例 #2
0
ファイル: community.class.php プロジェクト: saqar/aowow
 private static function getSubjects()
 {
     foreach (self::$subjCache as $type => $ids) {
         $_ = array_filter(array_keys($ids), 'is_numeric');
         if (!$_) {
             continue;
         }
         $cnd = [CFG_SQL_LIMIT_NONE, ['id', $_]];
         switch ($type) {
             case TYPE_NPC:
                 $obj = new CreatureList($cnd);
                 break;
             case TYPE_OBJECT:
                 $obj = new GameobjectList($cnd);
                 break;
             case TYPE_ITEM:
                 $obj = new ItemList($cnd);
                 break;
             case TYPE_ITEMSET:
                 $obj = new ItemsetList($cnd);
                 break;
             case TYPE_QUEST:
                 $obj = new QuestList($cnd);
                 break;
             case TYPE_SPELL:
                 $obj = new SpellList($cnd);
                 break;
             case TYPE_ZONE:
                 $obj = new ZoneList($cnd);
                 break;
             case TYPE_FACTION:
                 $obj = new FactionList($cnd);
                 break;
             case TYPE_PET:
                 $obj = new PetList($cnd);
                 break;
             case TYPE_ACHIEVEMENT:
                 $obj = new AchievementList($cnd);
                 break;
             case TYPE_TITLE:
                 $obj = new TitleList($cnd);
                 break;
             case TYPE_WORLDEVENT:
                 $obj = new WorldEventList($cnd);
                 break;
             case TYPE_CLASS:
                 $obj = new CharClassList($cnd);
                 break;
             case TYPE_RACE:
                 $obj = new CharRaceList($cnd);
                 break;
             case TYPE_SKILL:
                 $obj = new SkillList($cnd);
                 break;
             case TYPE_CURRENCY:
                 $obj = new CurrencyList($cnd);
                 break;
             case TYPE_EMOTE:
                 $obj = new EmoteList($cnd);
                 break;
             case TYPE_ENCHANTMENT:
                 $obj = new EnchantmentList($cnd);
                 break;
             default:
                 continue;
         }
         foreach ($obj->iterate() as $id => $__) {
             self::$subjCache[$type][$id] = $obj->getField('name', true);
         }
     }
 }