后台:跳主线功能
This commit is contained in:
@@ -41,7 +41,7 @@ export default class UserController extends Controller {
|
|||||||
|
|
||||||
public async createRoleData() {
|
public async createRoleData() {
|
||||||
const { ctx } = this;
|
const { ctx } = this;
|
||||||
const { hid, hlv, eid, ecount, itemid, itemcount, count, lv, skinid, selectedRowKeys: uids, optType, ehid } = ctx.request.body;
|
const { hid, hlv, eid, ecount, itemid, itemcount, count, lv, skinid, selectedRowKeys: uids, optType, ehid, war } = ctx.request.body;
|
||||||
if(optType == 'hero') {
|
if(optType == 'hero') {
|
||||||
ctx.body = await ctx.service.users.createHero(uids, hid, hlv);
|
ctx.body = await ctx.service.users.createHero(uids, hid, hlv);
|
||||||
} else if(optType == 'equip') {
|
} else if(optType == 'equip') {
|
||||||
@@ -56,6 +56,8 @@ export default class UserController extends Controller {
|
|||||||
ctx.body = await ctx.service.users.levelUp(uids, lv);
|
ctx.body = await ctx.service.users.levelUp(uids, lv);
|
||||||
} else if (optType == 'skin') {
|
} else if (optType == 'skin') {
|
||||||
ctx.body = await ctx.service.users.addSkin(uids, skinid);
|
ctx.body = await ctx.service.users.addSkin(uids, skinid);
|
||||||
|
} else if (optType == 'war') {
|
||||||
|
ctx.body = await ctx.service.users.setWarRecord(uids, war);
|
||||||
} else {
|
} else {
|
||||||
ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS);
|
ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ import { UserTaskModel } from '@db/UserTask';
|
|||||||
import { UserTaskHistoryModel } from '@db/UserTaskHistory';
|
import { UserTaskHistoryModel } from '@db/UserTaskHistory';
|
||||||
import { UserTaskRecModel } from '@db/UserTaskRec';
|
import { UserTaskRecModel } from '@db/UserTaskRec';
|
||||||
import { WishPoolReportModel } from '@db/WishPoolReport';
|
import { WishPoolReportModel } from '@db/WishPoolReport';
|
||||||
|
import { DicWar } from '@pubUtils/dictionary/DicWar';
|
||||||
|
|
||||||
// import { resResult } from '@pubUtils/util';
|
// import { resResult } from '@pubUtils/util';
|
||||||
|
|
||||||
@@ -949,4 +950,59 @@ export default class GMUsers extends Service {
|
|||||||
|
|
||||||
return Buffer.from(codes.join('\n'));
|
return Buffer.from(codes.join('\n'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async setWarRecord(roleIds: string[], _warId: string) {
|
||||||
|
const { ctx } = this;
|
||||||
|
let warId = parseInt(_warId);
|
||||||
|
if(warId < 104) return ctx.service.utils.resResult(STATUS.WRONG_PARMS, null, '不可跳到序章以前')
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
return ctx.service.utils.resResult(STATUS.SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async setSingleWarRecord(roleId: string, dicWar: DicWar) {
|
||||||
|
let { warStar } = await RoleModel.findByRoleId(roleId);
|
||||||
|
let deleteIds: number[] = [], myMaxWarId = 0, insertParams: DicWar[] = [];
|
||||||
|
for(let i = 0; i < warStar.length; i++) {
|
||||||
|
let { id, warType } = warStar[i];
|
||||||
|
if(warType == dicWar.warType) {
|
||||||
|
if(id >= dicWar.war_id) {
|
||||||
|
deleteIds.push(id);
|
||||||
|
}
|
||||||
|
if(id > myMaxWarId) {
|
||||||
|
myMaxWarId = id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let newWarStar = warStar.filter(cur => {
|
||||||
|
return deleteIds.indexOf(cur.id) == -1;
|
||||||
|
});
|
||||||
|
if(myMaxWarId < dicWar.war_id) {
|
||||||
|
for(let id = myMaxWarId + 1; id < dicWar.war_id; id++) {
|
||||||
|
let _dicWar = gameData.war.get(id)
|
||||||
|
if(_dicWar && _dicWar.warType == dicWar.warType) {
|
||||||
|
newWarStar.push({ id, warType: _dicWar.warType, star: 0 });
|
||||||
|
insertParams.push(_dicWar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let preGkIndex = newWarStar.findIndex(cur => cur.id == dicWar.previousGk);
|
||||||
|
console.log(dicWar.previousGk)
|
||||||
|
if(dicWar.previousGk && preGkIndex == -1) {
|
||||||
|
let _dicWar = gameData.war.get(dicWar.previousGk);
|
||||||
|
newWarStar.push({ id: _dicWar.war_id, warType: _dicWar.warType, star: 3 });
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import BaseModel from './BaseModel';
|
import BaseModel from './BaseModel';
|
||||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||||
|
import { DicWar } from '../pubUtils/dictionary/DicWar'
|
||||||
|
|
||||||
@index({ roleId: 1, battleId: 1 })
|
@index({ roleId: 1, battleId: 1 })
|
||||||
|
|
||||||
export default class RScriptRecord extends BaseModel {
|
export default class RScriptRecord extends BaseModel {
|
||||||
@@ -13,10 +12,10 @@ export default class RScriptRecord extends BaseModel {
|
|||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
warType: number; // 关卡 id
|
warType: number; // 关卡 id
|
||||||
|
|
||||||
@prop({ required: true, default: '' })
|
@prop({ required: false, default: '' })
|
||||||
scriptBefore: string; // 战场前剧本
|
scriptBefore: string; // 战场前剧本
|
||||||
|
|
||||||
@prop({ required: true, default: '' })
|
@prop({ required: false, default: '' })
|
||||||
scriptAfter: string; // 战场后剧本
|
scriptAfter: string; // 战场后剧本
|
||||||
|
|
||||||
|
|
||||||
@@ -41,6 +40,22 @@ export default class RScriptRecord extends BaseModel {
|
|||||||
const items: RScriptRecordType[] = await RScriptRecordModel.find({ roleId, warType }).select('battleId scriptBefore scriptAfter').lean(lean);
|
const items: RScriptRecordType[] = await RScriptRecordModel.find({ roleId, warType }).select('battleId scriptBefore scriptAfter').lean(lean);
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async deleteByWarId(roleId: string, battleId: number[]) {
|
||||||
|
return await RScriptRecordModel.deleteMany({ roleId, battleId: { $in: battleId } });
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async insertScripts(roleId: string, dicWars: DicWar[]) {
|
||||||
|
let insertParams = dicWars.map(dicWar => {
|
||||||
|
let doc = new RScriptRecordModel();
|
||||||
|
let param = { ...doc.toJSON(), roleId, battleId: dicWar.war_id, warType: dicWar.warType }
|
||||||
|
if(dicWar.scriptBefore) param.scriptBefore = dicWar.scriptBefore;
|
||||||
|
if(dicWar.scriptAfter) param.scriptAfter = dicWar.scriptAfter;
|
||||||
|
return param;
|
||||||
|
});
|
||||||
|
console.log('&&&&', insertParams)
|
||||||
|
return await RScriptRecordModel.insertMany(insertParams);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const RScriptRecordModel = getModelForClass(RScriptRecord);
|
export const RScriptRecordModel = getModelForClass(RScriptRecord);
|
||||||
|
|||||||
@@ -720,6 +720,7 @@ export default class Role extends BaseModel {
|
|||||||
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { totalPay: price } }, { new: true }).lean();
|
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { totalPay: price } }, { new: true }).lean();
|
||||||
return role;
|
return role;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const RoleModel = getModelForClass(Role);
|
export const RoleModel = getModelForClass(Role);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// 关卡表
|
// 关卡表
|
||||||
import {decodeArrayListStr, decodeArrayStr, parseNumberList, readFileAndParse} from '../util'
|
import {decodeArrayListStr, decodeArrayStr, parseNumberList, readFileAndParse} from '../util'
|
||||||
import { WAR_RELATE_TABLES, WAR_TYPE } from '../../consts';
|
import { WAR_RELATE_TABLES, WAR_TYPE } from '../../consts';
|
||||||
|
import { isString } from 'underscore'
|
||||||
export interface DicWar {
|
export interface DicWar {
|
||||||
|
|
||||||
// 关卡id
|
// 关卡id
|
||||||
@@ -40,6 +40,10 @@ export interface DicWar {
|
|||||||
readonly mapseid: number[];
|
readonly mapseid: number[];
|
||||||
// 秘境类型
|
// 秘境类型
|
||||||
readonly movePoint: number;
|
readonly movePoint: number;
|
||||||
|
// 战前剧本
|
||||||
|
readonly scriptBefore: string;
|
||||||
|
// 战后剧本
|
||||||
|
readonly scriptAfter: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const dicWar = new Map<number, DicWar>();
|
export const dicWar = new Map<number, DicWar>();
|
||||||
@@ -60,6 +64,16 @@ export function loadWar() {
|
|||||||
o.teammateReward = parseFixReward(o.teammateReward);
|
o.teammateReward = parseFixReward(o.teammateReward);
|
||||||
o.fobiddenCharactor = parseForbiddenChara(o.fobiddenCharactor);
|
o.fobiddenCharactor = parseForbiddenChara(o.fobiddenCharactor);
|
||||||
o.mapseid = parseNumberList(o.mapseid);
|
o.mapseid = parseNumberList(o.mapseid);
|
||||||
|
if(o.script_id && isString(o.script_id)) {
|
||||||
|
let scripts = o.script_id?.split('&')||[];
|
||||||
|
for(let script of scripts) {
|
||||||
|
if(script.indexOf('R_') != -1) {
|
||||||
|
o.scriptBefore = script;
|
||||||
|
} else if (script.indexOf('RE_') != -1) {
|
||||||
|
o.scriptAfter = script;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dicWar.set(o.war_id, o);
|
dicWar.set(o.war_id, o);
|
||||||
if(o.warType == WAR_TYPE.PVP) {
|
if(o.warType == WAR_TYPE.PVP) {
|
||||||
|
|||||||
Reference in New Issue
Block a user