This commit is contained in:
yuexin 2021-01-21 15:11:29 +08:00
commit d628879431
4 changed files with 110 additions and 95 deletions

View File

@ -7,7 +7,7 @@ import { BaseConst } from '../constants/BaseConst'
import { Hero } from '../models/subdoc/Hero' import { Hero } from '../models/subdoc/Hero'
import { CardGroup } from '../models/CardGroup' import { CardGroup } from '../models/CardGroup'
import { BagItem, ItemType } from '../models/BagItem' import { BagItem, ItemType } from '../models/BagItem'
import ItemCtrl from 'logic/ItemCtrl' import ItemCtrl from '../logic/ItemCtrl'
export default class AccountController extends BaseController { export default class AccountController extends BaseController {
@role('anon') @role('anon')
@ -23,9 +23,9 @@ export default class AccountController extends BaseController {
if (account.season_score == -1) { if (account.season_score == -1) {
account.season_score = formulaCfg.get(70003).number 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)) { for (let [, cfg] of global.$cfg.get(BaseConst.HERO)) {
if (cfg.id <= 30100) { if (cfg.org_gift == 1) {
let hero = new Hero() let hero = new Hero()
hero.heroid = cfg.id hero.heroid = cfg.id
hero.free = true hero.free = true
@ -37,15 +37,20 @@ export default class AccountController extends BaseController {
let cardgroup = new CardGroup({}) let cardgroup = new CardGroup({})
let cards: Card[] = [] let cards: Card[] = []
for (let i = 1; i <= 4; i++) { for (let i = 1; i <= 4; i++) {
const cardid = cfg[`follower${ i }id`]
if (cardMap.has(cardid + '')) {
continue
}
let card = new Card() let card = new Card()
card.cardid = cfg[`follower${ i }id`] card.cardid = cardid
card.owned = false card.owned = true
card.ban = false card.ban = false
card.usetype = 0 card.usetype = 0
card.free = true card.free = true
card.free_expire = 0 card.free_expire = 0
card.time = Date.now()
cards.push(card) cards.push(card)
cardSet.add(card.cardid) cardMap.set(cardid + '', card)
} }
cardgroup.accountid = account.id cardgroup.accountid = account.id
cardgroup.heroid = cfg.id cardgroup.heroid = cfg.id
@ -56,8 +61,7 @@ export default class AccountController extends BaseController {
} }
} }
} }
account.cards = [...cardSet] result.cards = [...account.cardMap.values()].map(o => o.toJson())
result.cards = account.cards
let heros: any[] = [] let heros: any[] = []
for (let [key, hero] of account.heros) { for (let [key, hero] of account.heros) {
heros.push(hero.toJson()) heros.push(hero.toJson())
@ -89,16 +93,7 @@ export default class AccountController extends BaseController {
@router('post /api/:accountid/cards') @router('post /api/:accountid/cards')
async cardlist(req: any) { async cardlist(req: any) {
let account = req.user let account = req.user
let result: Card[] = [] let result: Card[] = [...account.cardMap.values()].map(o => o.toJson())
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)
}
//TODO:: 添加限免英雄和免费英雄 //TODO:: 添加限免英雄和免费英雄
return result return result
} }
@ -113,7 +108,11 @@ export default class AccountController extends BaseController {
@router('post /api/:accountid/useitem') @router('post /api/:accountid/useitem')
async userItem(req: any) { async userItem(req: any) {
let { accountid, itemid, count } = req.params 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) { if (!record) {
throw new ZError(11, 'item not found') throw new ZError(11, 'item not found')
} }

View File

@ -19,6 +19,7 @@ import { ZError } from '../common/ZError'
import { MoneyTypeConst } from '../constants/MoneyTypeConst' import { MoneyTypeConst } from '../constants/MoneyTypeConst'
import { timeBeforeDay } from '../utils/time.util' import { timeBeforeDay } from '../utils/time.util'
import { BaseConst } from '../constants/BaseConst' import { BaseConst } from '../constants/BaseConst'
import { Card } from './subdoc/Card'
export class RecordInfo { export class RecordInfo {
@prop() @prop()
@ -60,6 +61,11 @@ class UserClass extends FindOrCreate {
*/ */
@prop({ type: () => [Number] }) @prop({ type: () => [Number] })
public cards: number[] public cards: number[]
/**
* , 20210121
*/
@prop({ type: Card, default: new Map() })
public cardMap: Map<string, Card>
/** /**
* *
*/ */

View File

@ -1,37 +1,43 @@
import {prop} from "@typegoose/typegoose"; import { prop } from '@typegoose/typegoose'
/** /**
* *
*/ */
export class Card { export class Card {
@prop() @prop()
public cardid: number; public cardid: number
/** /**
* *
*/ */
@prop() @prop()
public owned: boolean; public owned: boolean
/** /**
* *
*/ */
@prop({ default: false }) @prop({ default: false })
public ban: boolean; public ban: boolean
/** /**
* *
* 0: 通用, 1: 赛季排位专用, 2: 匹配专用 * 0: 通用, 1: 赛季排位专用, 2: 匹配专用
*/ */
@prop({ default: 0 }) @prop({ default: 0 })
public usetype: number; public usetype: number
/** /**
* *
*/ */
@prop({ default: false }) @prop({ default: false })
public free: boolean; public free: boolean
/** /**
* *
*/ */
@prop() @prop()
public free_expire: number; public free_expire: number
/**
*
* @type {number}
*/
@prop()
public time: number
public toJson() { public toJson() {
return { return {
@ -40,7 +46,8 @@ export class Card {
ban: this.ban, ban: this.ban,
usetype: this.usetype, usetype: this.usetype,
free: this.free, free: this.free,
free_expire: this.free_expire free_expire: this.free_expire,
time: this.time
} }
} }
} }

View File

@ -1,31 +1,34 @@
import {prop} from "@typegoose/typegoose"; import { prop } from '@typegoose/typegoose'
export class Hero { export class Hero {
@prop() @prop()
public heroid: number; public heroid: number
/** /**
* *
*/ */
@prop({ default: false }) @prop({ default: false })
public free: boolean; public free: boolean
/** /**
* *
*/ */
@prop({ default: false }) @prop({ default: false })
public trial: boolean; public trial: boolean
@prop({ default: 0 }) @prop({ default: 0 })
public trial_expire: number; public trial_expire: number
/** /**
* *
*/ */
@prop({ default: 1 }) @prop({ default: 1 })
public level: number; public level: number
/** /**
* *
*/ */
@prop({ default: 0 }) @prop({ default: 0 })
public exp: number; public exp: number
@prop()
public time: number
public toJson() { public toJson() {
let data: any = { let data: any = {
@ -36,9 +39,9 @@ export class Hero {
free: this.free, free: this.free,
trial: this.trial, trial: this.trial,
trial_expire: this.trial_expire, trial_expire: this.trial_expire,
ban: false, ban: false
}; }
data.owned = !this.trial; data.owned = !this.trial
return data; return data
} }
} }