增加解锁英雄的接口

This commit is contained in:
zhl 2021-01-07 20:49:46 +08:00
parent 13858fec7d
commit dd5c51c722
4 changed files with 115 additions and 2 deletions

View File

@ -185,8 +185,8 @@
| 字段 | 说明 | | 字段 | 说明 |
| -------- | -------------------------------------- | | -------- | -------------------------------------- |
| type | 类型 0: 碎片, 1: 代币购买 2: 试用 | | type | 类型 0: 碎片, 1: 试用 |
| moneyid |代币的item id |
@ -256,6 +256,10 @@
level: 1 // 当前等级 level: 1 // 当前等级
} }
``` ```
### 11. 将专属英雄碎片转化成经验
## 三. 服务端接口列表 ## 三. 服务端接口列表
### 1. 上传对战记录(服务端调用) ### 1. 上传对战记录(服务端调用)

View File

@ -0,0 +1,40 @@
export class MoneyTypeConst {
/**
* coin: 金币
*/
public static readonly COIN = 'coin';
/**
* diamond: 钻石
*/
public static readonly DIAMOND = 'diamond';
/**
* hero_shard: 通用英雄碎片
*/
public static readonly HERO_SHARD = 'hero_shard';
/**
* hero_exp: 通用英雄经验
*/
public static readonly HERO_EXP = 'hero_exp';
/**
* card_scroll: 抽卡卷轴
*/
public static readonly CARD_SCROLL = 'card_scroll';
private static readonly HERO_SHARD_HEROID = 'hero_shard_';
private static readonly HERO_EXP_HEROID = 'hero_exp_';
/**
*
* @param heroId
*/
public static getHeroShard(heroId: number): string {
return `${this.HERO_SHARD_HEROID}_${heroId}`;
}
/**
*
* @param heroId
*/
public static getHeroExp(heroId: number): string {
return `${this.HERO_EXP_HEROID}_${heroId}`;
}
}

View File

@ -5,6 +5,7 @@ import {ZError} from "../common/ZError";
import {Hero} from "../models/subdoc/Hero"; import {Hero} from "../models/subdoc/Hero";
import {Card} from "../models/subdoc/Card"; import {Card} from "../models/subdoc/Card";
import {CardGroup} from "../models/CardGroup"; import {CardGroup} from "../models/CardGroup";
import {MoneyTypeConst} from "../constants/MoneyTypeConst";
export default class AccountController extends BaseController { export default class AccountController extends BaseController {
@role('anon') @role('anon')
@ -81,5 +82,50 @@ export default class AccountController extends BaseController {
return heros; return heros;
} }
@router('post /api/:accountid/hero/unlock/:heroid')
async unlockHero(req: any) {
let account = req.user;
let {heroid, type} = req.params;
if (!heroid) {
throw new ZError(101, '未指定heroid');
}
if (account.heros.has(heroid + '')) {
if (!account.heros.get(heroid + '').free) {
throw new ZError(102, '你已经解锁了该英雄');
}
}
let money0 = MoneyTypeConst.getHeroShard(heroid);
let money1 = MoneyTypeConst.HERO_SHARD;
let count0 = account.moneys.has(money0) ? account.moneys.get(money0) : 0;
let count1 = account.moneys.has(money1) ? account.moneys.get(money1) : 0;
// TODO:: 根据配置获取解锁英雄需要的碎片数量
let needCount = 30;
if (count0 + count1 < needCount) {
throw new ZError(102, '碎片数量不足');
}
if (count0 > 0) {
let rest = needCount - count0;
if (rest >= 0) {
needCount = rest;
account.moneys.set(money0, 0);
} else {
needCount = 0;
account.moneys.set(money0, Math.abs(rest));
}
}
// 上面已经过滤了 count0 + count1 > needcount, 所以这里不需要判断碎片是否足够
if (needCount > 0) {
count1 = count1 - needCount;
account.moneys.set(money1, count1);
}
let hero = new Hero();
hero.heroid = heroid;
hero.free = false;
hero.level = 1;
hero.exp = 0;
account.heros.set(heroid + '', hero);
return {};
}
} }

View File

@ -3,6 +3,7 @@ import {router} from "../decorators/router";
import {CardGroup} from "../models/CardGroup"; import {CardGroup} from "../models/CardGroup";
import {ZError} from "../common/ZError"; import {ZError} from "../common/ZError";
import {Card} from "../models/subdoc/Card"; import {Card} from "../models/subdoc/Card";
import {MoneyTypeConst} from "../constants/MoneyTypeConst";
export default class CardController extends BaseController { export default class CardController extends BaseController {
@router('post /api/:accountid/card_group/:heroid') @router('post /api/:accountid/card_group/:heroid')
@ -81,4 +82,26 @@ export default class CardController extends BaseController {
await record.save(); await record.save();
return {}; return {};
} }
@router('post /api/:accountid/card/draw/:count')
async drawCard(req: any) {
let {count} = req.params;
if (count < 10) {
count = 1;
}
if (count > 10) {
count = 10;
}
let account = req.user;
if (!account.moneys.has(MoneyTypeConst.CARD_SCROLL)) {
throw new ZError(101, '卷轴不足');
}
let money = account.moneys.get(MoneyTypeConst.CARD_SCROLL);
if (money < count) {
throw new ZError(101, '卷轴不足');
}
account.moneys.set(MoneyTypeConst.CARD_SCROLL, money - count);
// TODO: 随机取count张卡牌, 并与当前已有的卡比较, 将新卡添加进用户卡组
}
} }