diff --git a/docs/api.md b/docs/api.md index 8513c59..9341fb0 100644 --- a/docs/api.md +++ b/docs/api.md @@ -497,7 +497,9 @@ 3. Response: JSON ```js - +{ + ticket: '123123123' //匹配的时候须带上此ticket +} ``` diff --git a/src/controllers/AccountController.ts b/src/controllers/AccountController.ts index 4d4e82e..7aee02f 100644 --- a/src/controllers/AccountController.ts +++ b/src/controllers/AccountController.ts @@ -8,6 +8,7 @@ import { Hero } from '../models/subdoc/Hero' import { CardGroup } from '../models/CardGroup' import { BagItem, ItemType } from '../models/BagItem' import ItemCtrl from '../logic/ItemCtrl' +import { ItemInfo } from '../logic/ItemDef' export default class AccountController extends BaseController { @role('anon') @@ -126,17 +127,8 @@ export default class AccountController extends BaseController { throw new ZError(12, 'not enough item') } record.count -= count - let data = ItemCtrl.useItem(itemid, count) - // let data = [{ itemid: 10001, itemnum: 1 }] - for (let obj of data) { - let item = (await BagItem.findOrCreate({ - accountid, - itemid: obj.id, - itemtype: obj.type - })).doc - item.count += obj.count - await item.save() - } + let data: ItemInfo[] = ItemCtrl.useItem(itemid, count) + await BagItem.addItems(accountid, data) await record.save() return data } diff --git a/src/controllers/MatchController.ts b/src/controllers/MatchController.ts index 0cb7778..9a5f292 100644 --- a/src/controllers/MatchController.ts +++ b/src/controllers/MatchController.ts @@ -26,6 +26,6 @@ export default class MatchController extends BaseController { } record.count -= count await record.save() - return {} + return {ticket: '123123123123'} } } diff --git a/src/controllers/RecordController.ts b/src/controllers/RecordController.ts index 5137a9d..9681d0b 100644 --- a/src/controllers/RecordController.ts +++ b/src/controllers/RecordController.ts @@ -5,6 +5,10 @@ import { RecordInfo, User } from '../models/User' import { error } from '../common/Debug' import { timeBeforeDay } from '../utils/time.util' import { BaseConst } from '../constants/BaseConst' +import { MatchCfg } from '../cfg/parsers/MatchCfg' +import ItemCtrl from '../logic/ItemCtrl' +import { ItemInfo } from '../logic/ItemDef' +import { BagItem } from '../models/BagItem' export default class RecordController extends BaseController { @role('anon') @@ -24,9 +28,13 @@ export default class RecordController extends BaseController { async upload(req: any) { let record = new GameRecord(req.params) await record.save() - if (!record.season) { + if (!record.matchid) { return } + let cfg: MatchCfg = global.$cfg.get(BaseConst.MATCH).get(parseInt(record.matchid)) + if (cfg) { + error(`match cfg not found: ${record.matchid}`) + } const fc = global.$cfg.get(BaseConst.FORMULA) const scores = [ fc.get(70043).number, @@ -36,7 +44,8 @@ export default class RecordController extends BaseController { fc.get(70047).number, fc.get(70048).number ] - let seasonData = {} + let seasonData: any = {} + let itemData: any = {} for (let player of record.players) { if (player.accountid.startsWith('robot')) { continue @@ -115,9 +124,21 @@ export default class RecordController extends BaseController { * end of 处理比赛统计信息 */ await user.save() - // @ts-ignore seasonData[player.playerid] = user.season_data + /** + * 获取胜利失败的物品 + */ + let items: ItemInfo[] = [] + if (cfg) { + if (record.winner == player.team && cfg.winget) { + items = ItemCtrl.getItemsByInfo(cfg.winget); + } else if (record.winner !== player.team && cfg.failget) { + items = ItemCtrl.getItemsByInfo(cfg.failget); + } + } + itemData[player.playerid] = items + await BagItem.addItems(player.accountid, items) } - return seasonData + return {seasonData, itemData} } } diff --git a/src/models/BagItem.ts b/src/models/BagItem.ts index 5ec811f..fc8cf3d 100644 --- a/src/models/BagItem.ts +++ b/src/models/BagItem.ts @@ -2,7 +2,8 @@ import { dbconn } from '../decorators/dbconn' import { getModelForClass, index, - modelOptions, plugin, + modelOptions, + plugin, prop, Severity } from '@typegoose/typegoose' @@ -16,6 +17,7 @@ import findOrCreate from 'mongoose-findorcreate' import { BaseConst } from '../constants/BaseConst' import { DropItemCfg } from '../cfg/parsers/DropItemCfg' import { ItemCardCfg } from '../cfg/parsers/ItemCardCfg' +import { ItemInfo } from '../logic/ItemDef' export enum ItemType { UNKNOW = 0, // 未知 @@ -71,7 +73,19 @@ class BagItemClass extends FindOrCreate { public position: number @prop() - public souce?: string + public source?: string + + public static async addItems(accountid: string, items: ItemInfo[]) { + for (const item of items) { + let record = (await BagItem.findOrCreate({ + accountid, + itemid: item.id, + itemtype: item.type + })).doc + record.count += item.count + await record.save() + } + } public toJson() { return { diff --git a/src/models/GameRecord.ts b/src/models/GameRecord.ts index 93567c4..3e915b7 100644 --- a/src/models/GameRecord.ts +++ b/src/models/GameRecord.ts @@ -63,6 +63,9 @@ class GameRecordClass extends Base{ @prop() public season: number; + @prop() + public matchid: string; + @prop({_id: false, type: () => [GamePlayer]}) public players: GamePlayer[]; @@ -73,6 +76,7 @@ class GameRecordClass extends Base{ round: this.round, winner: this.winner, season: this.season, + match: this.matchid, players: '', }