_rspData( array( 'goods_list' => $goodsList, ) ); } public function buyGoodsS() { myself()->_verifySwitch('shop.buy'); $goodsId = getReqVal('goods_id', 0); $goodsNum = getReqVal('goods_num', 0); if ($goodsNum < 1) { myself()->_rspErr(1, "goods_num parameter error, goods_num: {$goodsNum}"); return; } $goodsMeta = mt\ShopGoods::getByGoodsUuid($goodsId); if (!$goodsMeta) { myself()->_rspErr(1, 'goods not found'); return; } if ($goodsMeta['is_close']) { myself()->_rspErr(1, 'no right to purchase'); return; } if ($goodsNum < 1) { myself()->_rspErr(1, 'goods_num paramater error'); return; } if ($goodsNum > $goodsMeta['max_amount']) { myself()->_rspErr(1, "goods_num parameter error, max_amount: {$goodsMeta['max_amount']}"); return; } $itemMeta = mt\Item::get($goodsMeta['item_id']); if (!$itemMeta) { myself()->_rspErr(1, 'goods not found, goods_id: ' . $goodsMeta['goods_id']); return; } $errCode = 0; $errMsg = ''; // if ($itemMeta['type'] == mt\Item::HERO_SKIN_TYPE) { // if (!ShopService::canBuy($itemMeta, $errCode, $errMsg)) { // myself()->_rspErr($errCode, $errMsg); // return; // } // } if (!ShopService::buyLimitCheck($goodsMeta, $errCode, $errMsg)) { myself()->_rspErr($errCode, $errMsg); return; } $propertyChgService = new services\PropertyChgService(); $awardService = new services\AwardService(); $tokenType = $goodsMeta['token_type']; $price = $goodsMeta['price']; if (!in_array( $tokenType, array( mt\Shop::TOKEN_TYPE_GOLD, mt\Shop::TOKEN_TYPE_DIAMOND ) )) { myself()->_rspErr(1, "token_type is unsupport, {$tokenType}"); return; } if ($price < 1) { myself()->_rspErr(1, "config error"); return; } $costItemId = myself()->getCostItemIdByTokenType($tokenType); $costItems = array( array( 'item_id' => $costItemId, 'item_num' => $goodsNum * $price ) ); $lackItem = null; if (!myself()->_hasEnoughItems($costItems, $lackItem)) { myself()->_rspErr(2, myself()->_getLackItemErrMsg($lackItem)); return; } ShopBuyRecord::add($goodsMeta['goods_id'], $goodsNum); myself()->_decItems($costItems); for ($i = 0; $i < $goodsNum; $i++) { $this->internalAddItem($awardService, $propertyChgService, $itemMeta, $goodsMeta['item_num'] ); } $propertyChgService->addUserChg(); $this->_rspData( array( 'award' => $awardService->toDto(), 'property_chg' => $propertyChgService->toDto(), ) ); } private function getCostItemIdByTokenType($tokenType) { switch ($tokenType) { case mt\Shop::TOKEN_TYPE_GOLD: { return V_ITEM_GOLD; } break; case mt\Shop::TOKEN_TYPE_DIAMOND: { return V_ITEM_DIAMOND; } break; default: return -1; } return -1; } public function boxPreview() { $goodsId = getReqVal('goods_id', ''); $goodsMeta = mt\ShopGoods::get($goodsId); if (!$goodsMeta) { myself()->_rspErr(1, 'goods not found'); return; } $itemMeta = mt\Item::get($goodsMeta['item_id']); if ($itemMeta['type'] != mt\Item::CHEST_BOX_TYPE) { $this->_rspErr(2, 'goods_id is invalid'); return; } $chestType = $itemMeta['sub_type']; $itemStore = mt\ShopChest::getRandomItemListByChestType($chestType); if (!$itemStore) { $this->_rspErr(2, 'goods_id is invalid'); return; } $record = array(); foreach ($itemStore as $key => $value) { foreach ($value as $k => $v) { if (empty($record[$v['item_id']])) { $record[$v['item_id']] = 0; } $record[$v['item_id']] += 1; } } $this->_rspData( array( 'items' => array_keys($record), 'free_num' => 0, ) ); } private function internalAddItem($awardService, $propertyChgService, $itemMeta, $count ) { myself()->_addItems( array( array( 'item_id' => $itemMeta['id'], 'item_num' => $count ) ), $awardService, $propertyChgService); } }