Files
ZYZ/game-server/app/servers/battle/handler/guildBossHandler.ts
2021-01-22 09:44:13 +08:00

118 lines
5.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Application, BackendSession, pinus } from 'pinus';
import { resResult, genCode } from '../../../pubUtils/util';
import { STATUS } from '../../../consts';
import { BossScriptModel } from '../../../db/BossScript';
import { BattleRecordModel } from '../../../db/BattleRecord';
import { nowSeconds, getTodayZeroPoint } from '../../../pubUtils/timeUtil';
import { getBossScriptInfo, bossResult, checkMemberExists, pushBossHpMessage, getBossScriptWhenEnd, addBossScript } from '../../../services/guildBossService';
import { findWhere } from 'underscore'
import { GUILD_DATA_NAME } from '../../../consts/constModules/guildConst';
export default function (app: Application) {
return new GuildHandler(app);
}
export class GuildHandler {
constructor(private app: Application) {
}
// 获得boss关卡
async getBossScript(msg: { code: string }, session: BackendSession) {
const { code } = msg;
//TODO校验
const roleId = session.get('roleId');
let bossScript = await BossScriptModel.findBossScript(code);
if (!bossScript) {
return resResult(STATUS.SUCCESS, {type: 1});//1等待团长开启2今日已开启且boss通关3开启中
}
let result = await getBossScriptInfo(bossScript, roleId);
return resResult(STATUS.SUCCESS, result);
}
//开启演武场
async openBossScript(msg: { code: string }, session: BackendSession) {
const { code } = msg;
const roleId = session.get('roleId');
//TODO检查权限
let bossScript = await BossScriptModel.findBossScript(code);
if (!!bossScript && ( bossScript.bossHp > 0 || bossScript.time >= getTodayZeroPoint() )) {
return resResult(STATUS.GUILD_SCRIPT_IS_OPENED_TODAY);
}
//TODO随机地图
let bossHp = 1000;
let warId = 1;
await BossScriptModel.openBossScript(code, bossHp, warId);
let result = {warId, ranks: [], myRank: {}, bossHp, type: 3};
return resResult(STATUS.SUCCESS, result);
}
async bossScriptStart(msg: { code: string }, session: BackendSession) {
const { code } = msg;
const roleId = session.get('roleId');
const roleName = session.get('roleName');
//TODO校验
let bossScript = await BossScriptModel.findBossScript(code);
if (!bossScript)
return resResult(STATUS.GUILD_SCRIPT_NOT_OPENED);
if (bossScript.bossHp <= 0)
return resResult(STATUS.GUILD_SCRIPT_IS_COMPLETE);
let myRank = findWhere(bossScript.ranks, {roleId});
if (!!myRank && myRank.time > getTodayZeroPoint())
return resResult(STATUS.GUILD_SCRIPT_IS_BATTLED);
let { warId, ranks } = bossScript;
const battleCode = genCode(8); // 关卡唯一值
//TODO查看地图字典
let warInfo;
await BattleRecordModel.updateBattleRecordByCode(battleCode, {
$set: {
roleId, roleName, battleId: warId,
status: 0,
warName: warInfo.gk_name,
warType: warInfo.warType,
record: { heroes:[],recordNum: bossScript.num, bossHp: bossScript.bossHp},
}
}, true);
const serverId = session.get('serverId');
await addBossScript(code, serverId, roleId);
if (!findWhere(ranks, {roleId})) {
await BossScriptModel.pushRanks(code, {roleId, score: 0, time:nowSeconds()});
}
return resResult(STATUS.SUCCESS, { battleCode });
}
async action (msg: { code: string, damage: number, battleCode: string }, session: BackendSession ) {
const { code, battleCode, damage } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
let flag = await checkMemberExists(code, serverId, roleId, battleCode);
if (!flag) {
return;
}
//记录伤害
let bossScript = await BossScriptModel.updateBossHp(code, damage, roleId);
if (!bossScript) {//进入结算
let flag = await bossResult(code, serverId, GUILD_DATA_NAME.BOSS_SCRIPT, roleId, damage);
if (!flag) {
return resResult(STATUS.WRONG_PARMS);
}
} else {
pushBossHpMessage(code, serverId, bossScript.bossHp);
}
return resResult(STATUS.SUCCESS, { bossHp: bossScript.bossHp>0?bossScript.bossHp:0 });
}
async bossScriptEnd(msg: { code: string, battleCode: string }, session: BackendSession) {
const { code, battleCode } = msg;
const roleId = session.get('roleId');
const battleRecord = await BattleRecordModel.getBattleRecordByCode(battleCode, true);
if(!battleRecord || battleRecord.status != 0 || roleId != battleRecord.roleId) {
return resResult(STATUS.WRONG_PARMS);
}
await BattleRecordModel.updateBattleRecordByCode(battleCode, {
$set: { status: 1 }//战斗结束统一设置成1
}, true);
let bossScript = await BossScriptModel.findBossScript(code);
let result = await getBossScriptWhenEnd(bossScript, roleId, battleRecord.record.recordNum);
return resResult(STATUS.SUCCESS, result);
}
}