后台:设置关卡等级

This commit is contained in:
luying
2021-12-17 20:44:15 +08:00
parent 07e12ccf9e
commit 3ca6d99dc7
6 changed files with 52 additions and 36 deletions

View File

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

View File

@@ -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);

View File

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

View File

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

View File

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

View File

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