This commit is contained in:
aozhiwei 2023-07-28 11:25:24 +08:00
parent 915aa9f721
commit 8edf14e240
2 changed files with 7 additions and 106 deletions

View File

@ -163,28 +163,13 @@ class Shop(object):
] ]
}, },
{ {
'name': 'buyBlindBox', 'name': 'boxPreview',
'desc': '购买盲盒(宝箱)', 'desc': '宝箱道具预览',
'group': 'Shop', 'group': 'Shop',
'url': 'webapp/index.php?c=Shop&a=buyBlindBox', 'url': 'webapp/index.php?c=Shop&a=boxPreview',
'params': [ 'params': [
_common.ReqHead(), _common.ReqHead(),
['id', 0, '商品唯一id参见shopGoods表'], ['goods_uuid', 0, '商品唯一id'],
['num', 0, '购买数量 1:单个 10:十连抽'],
],
'response': [
_common.RspHead(),
['!result', [_common.BlindBoxResult()], '盲盒结果列表'],
]
},
{
'name': 'getChestItems',
'desc': '获取宝箱可能出现的物品列表',
'group': 'Shop',
'url': 'webapp/index.php?c=Shop&a=getChestItems',
'params': [
_common.ReqHead(),
['id', 0, '商品唯一id参见shopGoods表'],
], ],
'response': [ 'response': [
_common.RspHead(), _common.RspHead(),

View File

@ -632,10 +632,11 @@ class ShopController extends BaseAuthedController
case ShopController::TOKEN_TYPE_BUSD: case ShopController::TOKEN_TYPE_BUSD:
case ShopController::TOKEN_TYPE_MATIC: case ShopController::TOKEN_TYPE_MATIC:
case ShopController::TOKEN_TYPE_BNB: case ShopController::TOKEN_TYPE_BNB:
default: default: {
$this->_rspErr(1, "token_type is unsupport, {$token_type}"); $this->_rspErr(1, "token_type is unsupport, {$token_type}");
} }
} }
}
public function buyDiamond() public function buyDiamond()
{ {
@ -684,7 +685,7 @@ class ShopController extends BaseAuthedController
); );
} }
public function getChestItems() public function boxPreview()
{ {
$id = getReqVal('id', 0); $id = getReqVal('id', 0);
$goods = mt\ShopGoods::get($id); $goods = mt\ShopGoods::get($id);
@ -960,89 +961,4 @@ class ShopController extends BaseAuthedController
} }
} }
public function buyBlindBox()
{
$account = $this->_getAccountId();
$id = getReqVal('id', 0);
$num = getReqVal('num', 0);
if (!($num == 1 || $num == 10)) {
$this->_rspErr(2, 'num is invalid');
return;
}
$shop = mt\ShopGoods::get($id);
if (!$shop) {
$this->_rspErr(2, 'id is invalid');
return;
}
$meta = mt\Item::get($shop['goods_id']);
$cost = $shop['price'] * $num;
$isFreeBuy = false;
if (!empty($shop['free_type'])) {
$count = $this->countFreeBuyTimes($shop['free_type'], $shop['id'], $shop['goods_id']);
if ($count < $shop['free_num']) {
$isFreeBuy = true;
}
}
if ($isFreeBuy) {
if ($num != 1) {
$this->_rspErr(2, 'num is invalid');
return;
}
} else {
$costItems = $this->makeCostItems(V_ITEM_DIAMOND, $num * $shop['price']);
$lackItem = null;
if (!$this->_hasEnoughItems($costItems, $lackItem)) {
$this->_rspErr(2, $this->_getLackItemErrMsg($lackItem));
return;
}
}
$itemStore = mt\ShopChest::getRandomItemListByChestType($meta['sub_type']);
$grade = $meta['sub_type'];
$result = array();
for ($i = 0; $i < $num; $i++) {
$record = array();
foreach ($itemStore as $key => $value) {
$item = $this->weighted_random($value);
$itemMeta = mt\Item::get($item['item_id']);
if (!$itemMeta) {
$this->_rspErr(2, 'item_id is invalid ' . $item['item_id'] . ' in blind box ' . $shop['goods_id']);
return;
}
$propertyChgService = new services\PropertyChgService();
if ($item['item_type'] == 2) {
$this->internalAddItem($propertyChgService, $itemMeta, $item['num'], 0, $grade);
} else {
for ($j = 0; $j < $item['num']; $j++) {
$this->internalAddItem($propertyChgService, $itemMeta, 1, 0, $grade);
}
}
$record[$key] = array("item_id" => $item['item_id'], "item_num" => $item['num']);
array_push($result, $record[$key]);
}
if ($isFreeBuy) {
$this->addFreeBuyRecord($shop);
}
}
if (!$isFreeBuy) {
$this->_decItems($costItems);
$event = [
'name' => LogService::SHOP_BUY_ITEM_BLIND_BOX,
'val' => $costItems[0]['item_num']
];
LogService::consumeDiamond($event);
}
$propertyChgService->addUserChg();
$this->_rspData(
array(
'reuslt' => $result,
'property_chg' => $propertyChgService->toDto(),
)
);
}
} }