修改关卡记录逻辑

This commit is contained in:
luying
2020-09-14 15:38:04 +08:00
parent b6725151d0
commit 693a87cd89
8 changed files with 63 additions and 41 deletions

1
game-server/app/resource Symbolic link
View File

@@ -0,0 +1 @@
../../shared/resource

View File

@@ -1,9 +1,10 @@
import { Application, BackendSession } from 'pinus';
import { BattleRecordModel } from '../../../../../shared/db/BattleRecord';
import { BattleRecordModel } from '../../../db/BattleRecord';
import { getWarById, getGoodById } from '../../../util/gamedata';
import { CounterModel } from '../../../../../shared/db/Counter';
import { HeroModel } from '../../../../../shared/db/Hero';
import { EquipModel } from '../../../../../shared/db/Equip';
import { CounterModel } from '../../../db/Counter';
import { HeroModel } from '../../../db/Hero';
import { EquipModel } from '../../../db/Equip';
import { genCode } from '../../../util/util';
export default function(app: Application) {
return new NormalBattleHandler(app);
@@ -13,9 +14,9 @@ export class NormalBattleHandler {
constructor(private app: Application) {
}
// 进入关卡前,设置status=0
async checkBattle(msg: {battleId: number}, session: BackendSession) {
const { battleId } = msg;
// 进入关卡前,记录信息,生成唯一标识
async checkBattle(msg: {battleId: number, heroes: Array<any> }, session: BackendSession) {
const { battleId, heroes } = msg;
let roleId = session.get('roleId');
let roleName = session.get('roleName');
let warInfo = getWarById(battleId);
@@ -26,40 +27,54 @@ export class NormalBattleHandler {
}
}
const BattleRecord = await BattleRecordModel.updateBattleRecordByRole(roleId, battleId, {
const battleCode = genCode(8);
const BattleRecord = await BattleRecordModel.updateBattleRecordByCode(battleCode, {
$set: {
roleId,
roleName,
battleId,
status: 0,
warName: warInfo.gk_name,
warType: warInfo.war_type
},
$inc: {
count: 1
warType: warInfo.war_type,
record: { heroes }
}
});
}, true);
let {status} = BattleRecord;
let { count, status} = BattleRecord;
return {
code: 200,
data: {
battleId, count, status
battleId, battleCode, status
}
}
}
// 关卡结算,记录使用的武将,获得奖励
async battleEnd(msg: {battleId: number, isSuccess: boolean, heroes: Array<any>, }, session: BackendSession) {
async battleEnd(msg: {battleCode: string, battleId: number, isSuccess: boolean, heroes: Array<any>, }, session: BackendSession) {
const { battleId, isSuccess, heroes } = msg;
const { battleCode, battleId, isSuccess, heroes } = msg;
let roleId = session.get('roleId');
let roleName = session.get('roleName');
let warInfo = getWarById(battleId);
const BattleRecord = await BattleRecordModel.getBattleRecordByRole(roleId, battleId);
const BattleRecord = await BattleRecordModel.getBattleRecordByCode(battleCode, true);
if(!BattleRecord || BattleRecord.status != 0) {
return {
code: 202,
data: '关卡状态错误,未开启挑战'
data: '关卡状态错误'
}
}
let flag = 1; // 对比hero信息
let { record: { heroes: dbHeroes } } = BattleRecord;
for(let hid of heroes) {
if(dbHeroes.indexOf(hid) == -1) flag = 0;
}
if(!flag) {
return {
code: 202,
data: '关卡信息不同'
}
}
@@ -69,9 +84,6 @@ export class NormalBattleHandler {
$set: {
status: 1,
record: { heroes }
},
$inc: {
successCount: 1
}
}
reward = await this.handleReward(roleId, roleName, warInfo.reward);
@@ -80,21 +92,18 @@ export class NormalBattleHandler {
$set: {
status: 2,
record: { heroes }
},
$inc: {
failCount: 1
}
}
reward = [];
}
const result = await BattleRecordModel.updateBattleRecordByRole(roleId, battleId, params);
let {count, status} = result;
const updateResult = await BattleRecordModel.updateBattleRecordByCode(battleCode, params, true);
let { status } = updateResult;
return {
code: 200,
data: {
battleId, count, status,
battleCode, battleId, status,
goods: reward
}
}

View File

@@ -4,7 +4,7 @@ const path = require('path');
var gamedata = {};
function initData () {
fs.readdirSync(__dirname + '/../../config/resource')
fs.readdirSync(__dirname + '/../resource')
.filter(function(file) {
return (file.indexOf(".") !== 0) && (file !== "index.js");
})
@@ -13,7 +13,7 @@ function initData () {
var name = file.split('.')[0];
try {
gamedata[name] = JSON.parse(
fs.readFileSync(path.resolve(__dirname, "../../config/resource/" + file))
fs.readFileSync(path.resolve(__dirname, "../resource/" + file))
);
} catch(e) {
console.error('【文件缺少】:' + file);

View File

@@ -0,0 +1,10 @@
export function genCode(len) {
const chars = '123456789ABCDEFGHJKLMNPQRSTWXYZabcdefghijklmnopqrstuvwxyz';
const charArr = chars.split('');
let code = '';
for (let i = 0; i < len; i++) {
code += charArr[Math.floor(Math.random() * charArr.length)];
}
return code;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -7,6 +7,7 @@
],
"module": "commonjs", //指定生成哪个模块系统代码
"target": "es2017",
"resolveJsonModule": true,
"lib": [
"es2015",
"es2016",
@@ -24,6 +25,7 @@
"watch":false //在监视模式下运行编译器。会监视输出文件,在它们改变时重新编译。
},
"include":[
"./app/**/*.json",
"./app/**/*.ts",
"./config/**/*.ts",
"./app.ts",