1
This commit is contained in:
parent
915aa9f721
commit
8edf14e240
23
doc/Shop.py
23
doc/Shop.py
@ -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(),
|
||||||
|
@ -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(),
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user