diff --git a/src/common/GConfig.ts b/src/common/GConfig.ts index d9d2998..d72944a 100644 --- a/src/common/GConfig.ts +++ b/src/common/GConfig.ts @@ -8,12 +8,14 @@ import { ItemCardCfg } from '../cfg/parsers/ItemCardCfg' import { MatchCfg } from '../cfg/parsers/MatchCfg' import { ItemFuncCfg } from '../cfg/parsers/ItemFuncCfg' import ItemCtrl from "../logic/ItemCtrl"; +import { EffectCardCfg } from '../cfg/parsers/EffectCardCfg' export function initData() { const rP = DataParser.regCommonParser.bind(DataParser); rP(BaseConst.HERO, HeroCfg); rP(BaseConst.UNIT, UnitCfg); + rP(BaseConst.EFFECTCARD, EffectCardCfg); rP(BaseConst.FORMULA, FormulaCfg); rP(BaseConst.DROPITEM, DropItemCfg); rP(BaseConst.ITEMCARD, ItemCardCfg); diff --git a/src/controllers/AccountController.ts b/src/controllers/AccountController.ts index 6959489..b866cfd 100644 --- a/src/controllers/AccountController.ts +++ b/src/controllers/AccountController.ts @@ -23,6 +23,19 @@ export default class AccountController extends BaseController { account.season_score = formulaCfg.get(70003).number } let cardMap = account.cardMap + for (let [, cfg] of global.$cfg.get(BaseConst.EFFECTCARD)) { + if (cfg.org_gift == 1 && !cardMap.has(cfg.id + '')) { + const card = new Card() + card.cardid = cfg.id + card.owned = true + card.ban = false + card.usetype = 0 + card.free = true + card.free_expire = 0 + card.time = Date.now() + cardMap.set(card.cardid + '', card) + } + } for (let [, cfg] of global.$cfg.get(BaseConst.HERO)) { if (cfg.org_gift == 1) { let hero = new Hero() @@ -39,19 +52,16 @@ export default class AccountController extends BaseController { let cards: Card[] = [] for (let i = 1; i <= 4; i++) { const cardid = cfg[`follower${ i }id`] - let card = cardMap.get(cardid + '') - if (!card) { - 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) - cardMap.set(cardid + '', card) - } + const owned = cardMap.has(cardid) + const card = new Card() + card.cardid = cardid + card.owned = owned + card.ban = false + card.usetype = 0 + card.free = !owned + card.free_expire = 0 + card.time = Date.now() + cards.push(card) } cardgroup.accountid = account.id cardgroup.heroid = cfg.id diff --git a/src/controllers/CardController.ts b/src/controllers/CardController.ts index 0399a06..ee54078 100644 --- a/src/controllers/CardController.ts +++ b/src/controllers/CardController.ts @@ -68,10 +68,18 @@ export default class CardController extends BaseController { throw new ZError(103, '卡组已被删除') } if (!record) { + let count = await CardGroup.count({accountid, isdefault: false, deleted: false}) + let account = req.user + if (count >= account.slot) { + throw new ZError(105, '英雄可使用的卡槽数量不足') + } record = new CardGroup() record.accountid = accountid record.isdefault = false } + if (record.isdefault) { + throw new ZError(104, '默认卡组不能修改') + } if (selected) { await CardGroup.updateMany({ accountid, diff --git a/src/controllers/HeroController.ts b/src/controllers/HeroController.ts index 88b890d..1868f12 100644 --- a/src/controllers/HeroController.ts +++ b/src/controllers/HeroController.ts @@ -43,19 +43,15 @@ export default class HeroController extends BaseController { break } const cardid = cfg[`follower${ i }id`] - let card = cardMap.get(cardid + '') - if (!card) { - card = new Card() - card.cardid = cardid - card.owned = false - card.ban = false - card.usetype = 0 - card.free = true - card.time = Date.now() - card.free_expire = 0 - cardMap.set(card.cardid + '', card) - } - + const owned = cardMap.has(cardid) + const card = new Card() + card.cardid = cardid + card.owned = owned + card.ban = false + card.usetype = 0 + card.free = !owned + card.free_expire = 0 + card.time = Date.now() cards.push(card) } cardgroup.accountid = account.id @@ -118,7 +114,7 @@ export default class HeroController extends BaseController { let needItem = cfg[`Unlockgroup${needSlot}id`] // @ts-ignore let needCount = cfg[`Unlockgroup${needSlot}num`] - let item = await BagItem.findOne({accountid, itemid: needItem, itemtype: ItemType.UNKNOW}) + let item = await BagItem.findOne({accountid, itemid: needItem}) if (!item || item.count < needCount) { throw new ZError(13, 'not enough unlock item') }