diff --git a/docs/api.md b/docs/api.md index df0f6d5..6ce9a97 100644 --- a/docs/api.md +++ b/docs/api.md @@ -448,6 +448,42 @@ ] ``` +### 18. 刷新随机到的武将 +1. Method: POST +2. URI: /api/:accountid/randomhero + +| 字段 | 说明 | +| -------- | -------------------------------------- | +| accountid | 帐号id | + + +3. Response: JSON + +```js + + +``` + +### 19. 拼藏宝图 +1. Method: POST +2. URI: /api/:accountid/puzzle + +| 字段 | 说明 | +| -------- | -------------------------------------- | +| accountid | 帐号id | + + +3. Response: JSON + +```js +{ + "id": 0, //道具id + "count": 0, //道具数量 + "type": 1 //道具类型 + } + +``` + diff --git a/src/controllers/ItemController.ts b/src/controllers/ItemController.ts index 0ad5d13..8e798b7 100644 --- a/src/controllers/ItemController.ts +++ b/src/controllers/ItemController.ts @@ -4,6 +4,8 @@ import { BagItem } from '../models/BagItem' import { ZError } from '../common/ZError' import { ItemInfo } from '../logic/ItemDef' import ItemCtrl from '../logic/ItemCtrl' +import { BaseConst } from '../constants/BaseConst' +import { error } from '../common/Debug' export default class ItemController extends BaseController { @router('post /api/:accountid/items') @@ -23,7 +25,7 @@ export default class ItemController extends BaseController { let { accountid, itemid, count } = req.params let record = await BagItem.findOne({ accountid, - itemid, + itemid }) if (!record) { throw new ZError(11, 'item not found') @@ -82,8 +84,45 @@ export default class ItemController extends BaseController { return record.toJson() } - @router('post /svr/:accountid/randomhero') + @router('post /api/:accountid/randomhero') async randomHero(req: any) { - + let { accountid } = req.params + const cfg = global.$cfg.get(BaseConst.ITEMFUNC).get(90003) + const itemInfos: ItemInfo[] = ItemCtrl.getItemsByInfo(cfg.consume1) + for (let item of itemInfos) { + let record = await BagItem.findOne({ accountid, itemid: item.id }) + if (!record || record.count < item.count) { + throw new ZError(10, 'not enough item' + item.id) + } + record.count -= item.count + await record.save() + } + return {} } + + @router('post /api/:accountid/puzzle') + async puzzleMap(req: any) { + let { accountid } = req.params + const cfg = global.$cfg.get(BaseConst.ITEMFUNC).get(90004) + const itemInfos: ItemInfo[] = ItemCtrl.getItemsByInfo(cfg.consume1) + for (let item of itemInfos) { + let record = await BagItem.findOne({ accountid, itemid: item.id }) + if (!record || record.count < item.count) { + throw new ZError(10, 'not enough item' + item.id) + } + record.count -= item.count + await record.save() + } + const resultItems = ItemCtrl.getItemsByInfo(cfg.get) + if (!resultItems || resultItems.length == 0) { + error(`拼藏宝图, 未获取到正确的目标物品配置`) + throw new ZError(11, 'no target item found') + } + let resultItem = resultItems[0] + let newItem = (await BagItem.findOrCreate({ accountid, itemid: resultItem.id, itemtype: resultItem.type })).doc + newItem.count += resultItem.count + await newItem.save() + return newItem.toJson() + } + }