diff --git a/gm-server/app/controller/users.ts b/gm-server/app/controller/users.ts index 383ec0148..8bc0b3caa 100644 --- a/gm-server/app/controller/users.ts +++ b/gm-server/app/controller/users.ts @@ -1,5 +1,4 @@ import { Controller } from 'egg'; -import { STATUS } from '@consts'; export default class UserController extends Controller { @@ -39,28 +38,10 @@ export default class UserController extends Controller { ctx.body = await ctx.service.users.getrolelist(page, pageSize, sortField, sortOrder, form); } - public async createRoleData() { + public async setWar() { const { ctx } = this; - const { hid, hlv, eid, ecount, itemid, itemcount, count, lv, skinid, selectedRowKeys: uids, optType, ehid, war } = ctx.request.body; - if(optType == 'hero') { - ctx.body = await ctx.service.users.createHero(uids, hid, hlv); - } else if(optType == 'equip') { - ctx.body = await ctx.service.users.createEquip(uids, eid, ecount, ehid); - } else if (optType == 'item') { - ctx.body = await ctx.service.users.createItem(uids, itemid, itemcount); - } else if (optType == 'gold') { - ctx.body = await ctx.service.users.addGold(uids, count); - } else if (optType == 'coin') { - ctx.body = await ctx.service.users.addCoin(uids, count); - } else if (optType == 'lv') { - ctx.body = await ctx.service.users.levelUp(uids, lv); - } else if (optType == 'skin') { - ctx.body = await ctx.service.users.addSkin(uids, skinid); - } else if (optType == 'war') { - ctx.body = await ctx.service.users.setWarRecord(uids, war); - } else { - ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS); - } + const { roleId, warId } = ctx.request.body; + ctx.body = await ctx.service.users.setWarRecord(roleId, warId); } diff --git a/gm-server/app/router.ts b/gm-server/app/router.ts index bb858dda3..74629f9a2 100644 --- a/gm-server/app/router.ts +++ b/gm-server/app/router.ts @@ -30,7 +30,7 @@ export default (app: Application) => { router.post('/api/users/fixsms', tokenParser, controller.users.fixSms); router.post('/api/users/getrolelist',tokenParser, controller.users.getrolelist); router.post('/api/users/deleterole',tokenParser, controller.users.deleteRole); - router.post('/api/users/createroledata',tokenParser, controller.users.createRoleData); + router.post('/api/users/setwar', controller.users.setWar); router.post('/api/users/getpvpdefense',tokenParser, controller.users.getPveDefense); router.post('/api/users/getherolist',tokenParser, controller.users.getHeroList); router.post('/api/users/deletehero', tokenParser, controller.users.deleteHero); diff --git a/gm-server/app/service/users.ts b/gm-server/app/service/users.ts index efec93221..e7f3ca934 100644 --- a/gm-server/app/service/users.ts +++ b/gm-server/app/service/users.ts @@ -6,7 +6,7 @@ import { PvpDefenseModel } from '@db/PvpDefense'; import { Service } from 'egg'; import Counter from '@db/Counter'; -import { STATUS, HERO_SYSTEM_TYPE, ITEM_CHANGE_REASON, REDIS_KEY } from '@consts'; +import { STATUS, HERO_SYSTEM_TYPE, ITEM_CHANGE_REASON, REDIS_KEY, WAR_TYPE } from '@consts'; import { ITID, COUNTER } from '@consts'; import { ItemModel } from '@db/Item'; import { gameData, getExpByLv } from '@pubUtils/data'; @@ -27,6 +27,8 @@ import { isNumber } from 'util'; import { GuildModel } from '@db/Guild'; import { RedisClient } from 'redis'; import { UserGuildModel } from '@db/UserGuild'; +import { TowerRecordModel } from '@db/TowerRecord'; +import { HangUpRecordModel } from '@db/HangUpRecord'; // import { resResult } from '@pubUtils/util'; @@ -726,22 +728,36 @@ export default class GMUsers extends Service { }); } - public async setWarRecord(roleIds: string[], _warId: string) { + public async setWarRecord(roleId: string, warId: number) { const { ctx } = this; - let warId = parseInt(_warId); - if(warId < 104) return ctx.service.utils.resResult(STATUS.WRONG_PARMS, null, '不可跳到序章以前') + if(!isNumber(warId)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); + if(warId < 104) return ctx.service.utils.resResult(STATUS.WRONG_PARMS, '不可以跳到序章以前') let dicWar = gameData.war.get(warId); if(!dicWar) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); - for(let roleId of roleIds) { - await this.setSingleWarRecord(roleId, dicWar); + await this.setWarStarAndScript(roleId, dicWar); + if(dicWar.warType == WAR_TYPE.TOWER) { + await this.setTowerWar(roleId, dicWar); } return ctx.service.utils.resResult(STATUS.SUCCESS); } - private async setSingleWarRecord(roleId: string, dicWar: DicWar) { + private async setTowerWar(roleId: string, dicWar: DicWar) { + let towerLv = 1; + for(let [lv, dicTower] of gameData.tower) { + if(dicTower.warArray.indexOf(dicWar.war_id) != -1) { + towerLv = lv; break; + } + } + let role = await RoleModel.updateRoleInfo(roleId, { towerLv }); + await TowerRecordModel.deleteAccount(roleId); + await TowerRecordModel.insertTowerRec(roleId, towerLv); + await HangUpRecordModel.updateRec(roleId, role.roleName, towerLv, new Date(), []); + } + + private async setWarStarAndScript(roleId: string, dicWar: DicWar) { let { warStar } = await RoleModel.findByRoleId(roleId); - let deleteIds: number[] = [], myMaxWarId = 0, insertParams: DicWar[] = []; + let deleteIds: number[] = [], myMaxWarId = 0; for(let i = 0; i < warStar.length; i++) { let { id, warType } = warStar[i]; if(warType == dicWar.warType) { @@ -761,7 +777,6 @@ export default class GMUsers extends Service { let _dicWar = gameData.war.get(id) if(_dicWar && _dicWar.warType == dicWar.warType) { newWarStar.push({ id, warType: _dicWar.warType, star: 0, stars: [] }); - insertParams.push(_dicWar); } } } @@ -771,12 +786,17 @@ export default class GMUsers extends Service { let _dicWar = gameData.war.get(dicWar.previousGk); newWarStar.push({ id: _dicWar.war_id, warType: _dicWar.warType, star: 0, stars: [] }); } + await RScriptRecordModel.deleteByWarType(roleId, dicWar.warType); + let insertParams: DicWar[] = []; + for(let [_, obj] of gameData.war) { + if(dicWar.warType == obj.warType && obj.war_id < dicWar.war_id) { + insertParams.push(obj); + } + } + if(insertParams.length > 0) { await RScriptRecordModel.insertScripts(roleId, insertParams); } - if(deleteIds.length > 0) { - await RScriptRecordModel.deleteByWarId(roleId, deleteIds); - } let role = await RoleModel.updateRoleInfo(roleId, { warStar: newWarStar }); return role; } diff --git a/shared/db/HangUpRecord.ts b/shared/db/HangUpRecord.ts index 3271ba61e..449a8a5bc 100644 --- a/shared/db/HangUpRecord.ts +++ b/shared/db/HangUpRecord.ts @@ -57,7 +57,7 @@ export default class HangUpRecord extends BaseModel { } public static async updateRec(roleId: string, roleName: string, endLv: number, endTime: Date, needReceiveGoods: Array<{gid:number, count: number}>, lean = true) { - await HangUpRecordModel.findOneAndUpdate({roleId, received: false}, {endLv, endTime, received: true, notReceivedGoods: needReceiveGoods}).lean(lean); + await HangUpRecordModel.updateMany({roleId, received: false}, {endLv, endTime, received: true, notReceivedGoods: needReceiveGoods}); const recDoc = new HangUpRecordModel(); const update = Object.assign(recDoc.toJSON(), {roleId, roleName, startTime: endTime, startLv: endLv}); delete update._id; diff --git a/shared/db/RScriptRecord.ts b/shared/db/RScriptRecord.ts index 001821d5d..ade4e79b4 100644 --- a/shared/db/RScriptRecord.ts +++ b/shared/db/RScriptRecord.ts @@ -41,6 +41,9 @@ export default class RScriptRecord extends BaseModel { return items; } + public static async deleteByWarType(roleId: string, warType: number) { + return await RScriptRecordModel.deleteMany({ roleId, warType }); + } public static async deleteByWarId(roleId: string, battleId: number[]) { return await RScriptRecordModel.deleteMany({ roleId, battleId: { $in: battleId } }); } diff --git a/shared/db/TowerRecord.ts b/shared/db/TowerRecord.ts index 6ad94c01f..2ab24d852 100644 --- a/shared/db/TowerRecord.ts +++ b/shared/db/TowerRecord.ts @@ -1,5 +1,6 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; +import { gameData } from '../pubUtils/data'; class WarStatus { @prop({ required: true }) @@ -86,6 +87,17 @@ export default class TowerRecord extends BaseModel { return rec; } + public static async insertTowerRec(roleId: string, lv: number) { + let insertParams = []; + let doc = new TowerRecordModel(); + for(let [towerLv, { warArray }] of gameData.tower) { + if(towerLv < lv) { + insertParams.push({...doc.toJSON(), roleId, lv: towerLv, warStatus: warArray.map(warId => ({ warId, status: true })), passed: true}) + } else if (towerLv == lv) { + insertParams.push({...doc.toJSON(), roleId, lv: towerLv, warStatus: warArray.map(warId => ({ warId, status: true })), passed: false}) + } + } + } public static async deleteAccount(roleId: string) { let result = await TowerRecordModel.deleteMany({roleId});