diff --git a/src/controllers/AccountController.ts b/src/controllers/AccountController.ts index 6882b8e..6afda86 100644 --- a/src/controllers/AccountController.ts +++ b/src/controllers/AccountController.ts @@ -7,7 +7,7 @@ import { BaseConst } from '../constants/BaseConst' import { Hero } from '../models/subdoc/Hero' import { CardGroup } from '../models/CardGroup' import { BagItem, ItemType } from '../models/BagItem' -import ItemCtrl from 'logic/ItemCtrl' +import ItemCtrl from '../logic/ItemCtrl' export default class AccountController extends BaseController { @role('anon') @@ -23,9 +23,9 @@ export default class AccountController extends BaseController { if (account.season_score == -1) { account.season_score = formulaCfg.get(70003).number } - let cardSet = new Set(account.cards) + let cardMap = account.cardMap for (let [, cfg] of global.$cfg.get(BaseConst.HERO)) { - if (cfg.id <= 30100) { + if (cfg.org_gift == 1) { let hero = new Hero() hero.heroid = cfg.id hero.free = true @@ -37,15 +37,20 @@ export default class AccountController extends BaseController { let cardgroup = new CardGroup({}) let cards: Card[] = [] for (let i = 1; i <= 4; i++) { + const cardid = cfg[`follower${ i }id`] + if (cardMap.has(cardid + '')) { + continue + } let card = new Card() - card.cardid = cfg[`follower${ i }id`] - card.owned = false + 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) - cardSet.add(card.cardid) + cardMap.set(cardid + '', card) } cardgroup.accountid = account.id cardgroup.heroid = cfg.id @@ -56,8 +61,7 @@ export default class AccountController extends BaseController { } } } - account.cards = [...cardSet] - result.cards = account.cards + result.cards = [...account.cardMap.values()].map(o => o.toJson()) let heros: any[] = [] for (let [key, hero] of account.heros) { heros.push(hero.toJson()) @@ -89,16 +93,7 @@ export default class AccountController extends BaseController { @router('post /api/:accountid/cards') async cardlist(req: any) { let account = req.user - let result: Card[] = [] - for (let cardid of account.cards) { - let card = new Card() - card.cardid = cardid - card.owned = true - card.ban = false - card.usetype = 0 - card.free = false - result.push(card) - } + let result: Card[] = [...account.cardMap.values()].map(o => o.toJson()) //TODO:: 添加限免英雄和免费英雄 return result } @@ -113,7 +108,11 @@ export default class AccountController extends BaseController { @router('post /api/:accountid/useitem') async userItem(req: any) { let { accountid, itemid, count } = req.params - let record = await BagItem.findOne({accountid, itemid, itemtype: ItemType.UNKNOW}) + let record = await BagItem.findOne({ + accountid, + itemid, + itemtype: ItemType.UNKNOW + }) if (!record) { throw new ZError(11, 'item not found') } diff --git a/src/models/User.ts b/src/models/User.ts index 95bcbbb..10237b2 100644 --- a/src/models/User.ts +++ b/src/models/User.ts @@ -19,6 +19,7 @@ import { ZError } from '../common/ZError' import { MoneyTypeConst } from '../constants/MoneyTypeConst' import { timeBeforeDay } from '../utils/time.util' import { BaseConst } from '../constants/BaseConst' +import { Card } from './subdoc/Card' export class RecordInfo { @prop() @@ -60,6 +61,11 @@ class UserClass extends FindOrCreate { */ @prop({ type: () => [Number] }) public cards: number[] + /** + * 已获得卡牌信息, 20210121添加 + */ + @prop({ type: Card, default: new Map() }) + public cardMap: Map /** * 已解锁英雄信息 */ diff --git a/src/models/subdoc/Card.ts b/src/models/subdoc/Card.ts index 402b2c7..852c2c4 100644 --- a/src/models/subdoc/Card.ts +++ b/src/models/subdoc/Card.ts @@ -1,46 +1,53 @@ -import {prop} from "@typegoose/typegoose"; +import { prop } from '@typegoose/typegoose' /** * 卡牌信息 */ export class Card { - @prop() - public cardid: number; - /** - * 是否已拥有 - */ - @prop() - public owned: boolean; - /** - * 是否被禁 - */ - @prop({default: false}) - public ban: boolean; - /** - * 赛季类型 - * 0: 通用, 1: 赛季排位专用, 2: 匹配专用 - */ - @prop({default: 0}) - public usetype: number; - /** - * 是否是限免卡牌 - */ - @prop({default: false}) - public free: boolean; - /** - * 限免过期时间 - */ - @prop() - public free_expire: number; + @prop() + public cardid: number + /** + * 是否已拥有 + */ + @prop() + public owned: boolean + /** + * 是否被禁 + */ + @prop({ default: false }) + public ban: boolean + /** + * 赛季类型 + * 0: 通用, 1: 赛季排位专用, 2: 匹配专用 + */ + @prop({ default: 0 }) + public usetype: number + /** + * 是否是限免卡牌 + */ + @prop({ default: false }) + public free: boolean + /** + * 限免过期时间 + */ + @prop() + public free_expire: number + /** + * 添加时间 + * @type {number} + */ + @prop() + public time: number - public toJson() { - return { - cardid: this.cardid, - owned: this.owned, - ban: this.ban, - usetype: this.usetype, - free: this.free, - free_expire: this.free_expire - } + public toJson() { + return { + cardid: this.cardid, + owned: this.owned, + ban: this.ban, + usetype: this.usetype, + free: this.free, + free_expire: this.free_expire, + time: this.time } + } } diff --git a/src/models/subdoc/Hero.ts b/src/models/subdoc/Hero.ts index 13d92e5..c9a8ba5 100644 --- a/src/models/subdoc/Hero.ts +++ b/src/models/subdoc/Hero.ts @@ -1,44 +1,47 @@ -import {prop} from "@typegoose/typegoose"; +import { prop } from '@typegoose/typegoose' export class Hero { - @prop() - public heroid: number; - /** - * 是否是免费英雄 - */ - @prop({default: false}) - public free: boolean; - /** - * 是否是试用 - */ - @prop({default: false}) - public trial: boolean; + @prop() + public heroid: number + /** + * 是否是免费英雄 + */ + @prop({ default: false }) + public free: boolean + /** + * 是否是试用 + */ + @prop({ default: false }) + public trial: boolean - @prop({default: 0}) - public trial_expire: number; - /** - * 等级 - */ - @prop({default: 1}) - public level: number; - /** - * 该等级下的经验值 - */ - @prop({default: 0}) - public exp: number; + @prop({ default: 0 }) + public trial_expire: number + /** + * 等级 + */ + @prop({ default: 1 }) + public level: number + /** + * 该等级下的经验值 + */ + @prop({ default: 0 }) + public exp: number - public toJson() { - let data: any = { - heroid: this.heroid, - usetype: 0, - level: this.level, - exp: this.exp, - free: this.free, - trial: this.trial, - trial_expire: this.trial_expire, - ban: false, - }; - data.owned = !this.trial; - return data; + @prop() + public time: number + + public toJson() { + let data: any = { + heroid: this.heroid, + usetype: 0, + level: this.level, + exp: this.exp, + free: this.free, + trial: this.trial, + trial_expire: this.trial_expire, + ban: false } + data.owned = !this.trial + return data + } }