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