diff --git a/src/controllers/CardController.ts b/src/controllers/CardController.ts index 2da4ad6..971ed32 100644 --- a/src/controllers/CardController.ts +++ b/src/controllers/CardController.ts @@ -3,20 +3,21 @@ import { router } from '../decorators/router' import { CardGroup } from '../models/CardGroup' import { ZError } from '../common/ZError' import { Card } from '../models/subdoc/Card' -import { MoneyTypeConst } from '../constants/MoneyTypeConst' import { BaseConst } from '../constants/BaseConst' import { BagItem, ItemType } from '../models/BagItem' import ItemCtrl from '../logic/ItemCtrl' import { error } from '../common/Debug' import { ItemFuncCfg } from '../cfg/parsers/ItemFuncCfg' -import { addHeroDefaultCardGroup } from '../dao/CardGroupDao' +import { + getDefaultCardGroupByHero +} from '../dao/CardGroupDao' import { ItemInfo } from '../logic/ItemDef' export default class CardController extends BaseController { @router('post /api/:accountid/card_group/:heroid') async cardGroupList(req: any) { let { accountid, heroid } = req.params - let query: any = { accountid: accountid, deleted: false } + let query: any = { accountid: accountid, deleted: false, isdefault: false } if (heroid) { query.heroid = parseInt(heroid) } @@ -26,30 +27,31 @@ export default class CardController extends BaseController { let data: any = record.toJson() result.push(data) } + if (heroid) { + result.push(getDefaultCardGroupByHero(heroid)) + } else { + let user = req.user + for(let [,hero] of user.heros) { + result.push(getDefaultCardGroupByHero(hero.heroid)) + } + } + return result } @router('get /svr/:accountid/group_info/:heroid/:gid') async cardGroupInfo(req: any) { let { accountid, heroid, gid } = req.params + heroid = +heroid let record + if (!gid || gid === 'default') { + return getDefaultCardGroupByHero(heroid) + } if (gid) { record = await CardGroup.findById(gid) } if (!record) { - if (!heroid || !accountid) { - throw new ZError(101, 'not enough params') - } - heroid = parseInt(heroid) - record = await CardGroup.findOne({ - accountid, - heroid, - deleted: false, - isdefault: true - }) - } - if (!record) { - throw new ZError(103, 'no card group found') + return getDefaultCardGroupByHero(heroid) } return record.toJson() } @@ -61,6 +63,9 @@ export default class CardController extends BaseController { if (!gid && !heroid) { throw new ZError(101, 'gid和heroid不能同时为空') } + if (gid === 'default') { + throw new ZError(106, '默认卡组不能修改') + } if (selected && !heroid) { throw new ZError(102, '要将某卡组设为selected, 必须同时传heroid') } @@ -113,6 +118,9 @@ export default class CardController extends BaseController { @router('post /api/:accountid/card_group/delete/:gid') async deleteCardGroup(req: any) { let { gid } = req.params + if (gid === 'default') { + throw new ZError(104, '默认卡组不能被删除') + } let record = await CardGroup.findById(gid) if (!record) { throw new ZError(101, '未找到记录') diff --git a/src/dao/CardGroupDao.ts b/src/dao/CardGroupDao.ts index dc8e0c2..8450fc8 100644 --- a/src/dao/CardGroupDao.ts +++ b/src/dao/CardGroupDao.ts @@ -21,8 +21,39 @@ export async function addHeroDefaultCardGroup(accountid: string, heroid: number, } cardgroup.accountid = accountid cardgroup.heroid = heroCfg.id - cardgroup.selected = false - cardgroup.isdefault = true + cardgroup.selected = true + cardgroup.isdefault = false cardgroup.cards = cards await cardgroup.save() } + +/** + * 获取英雄默认卡组 + * @param {number} heroid + * @return {{gid: string, cards: {free_expire: number, owned: boolean, cardid: number, count: number, time: number, free: boolean, usetype: number, ban: boolean}[], heroid: number, isdefault: boolean, selected: boolean}} + */ +export function getDefaultCardGroupByHero(heroid: number | string) { + heroid = +heroid + const heroCfg = global.$cfg.get(BaseConst.HERO).get(heroid) + let cardgroup = new CardGroup({}) + let cards: Card[] = [] + for (let i = 1; i <= 4; i++) { + const cardid = heroCfg[`follower${ i }id`] + const card = new Card() + card.cardid = cardid + card.owned = true + card.ban = false + card.usetype = 0 + card.free = true + card.free_expire = 0 + card.time = Date.now() + cards.push(card) + } + cardgroup.heroid = heroCfg.id + cardgroup.selected = false + cardgroup.isdefault = true + cardgroup.cards = cards + const data = cardgroup.toJson() + data.gid = 'default' + return data +}