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 { 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')
}

View File

@ -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<string, Card>
/**
*
*/

View File

@ -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
}
}
}

View File

@ -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
}
}