🦄 refactor(热更新): 分割状态代码和功能代码
This commit is contained in:
@@ -15,7 +15,7 @@ import { RoleStatus, ComBattleTeamModel, ComBattleTeamType, BossHp, ComRoleStatu
|
||||
import { ItemModel, ItemType } from '../../../db/Item';
|
||||
import { addItems, handleCost } from '../../../services/role/rewardService';
|
||||
import { checkRoleInQueue, getServerName, rmCreatedTeamFromRedis, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
|
||||
import { getRandBlueprtId, clearComBtlTimer, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, handleComBtlProgress, getComBattleFriendAdd, teammateInBlackList, blueprtIdValid, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam, addValidSearchingRoles, validToJoin, addRobotsToTeam, addRobotsLater, teamIsFullToStart, oneTeamNotInBlack, getAllAssistCnt, checkHasMyTeam, checkTeamStatusAndSend, getComBtlLvByPlayerLv, addToSearchingTeams, getCapFrd, getCapExtraCnt } from '../../../services/comBattleService';
|
||||
import { getRandBlueprtId, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, handleComBtlProgress, getComBattleFriendAdd, teammateInBlackList, blueprtIdValid, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam, addValidSearchingRoles, validToJoin, addRobotsToTeam, addRobotsLater, teamIsFullToStart, oneTeamNotInBlack, getAllAssistCnt, checkHasMyTeam, checkTeamStatusAndSend, getComBtlLvByPlayerLv, addToSearchingTeams, getCapFrd, getCapExtraCnt, startTeam } from '../../../services/battle/comBattleService';
|
||||
import { setAp } from '../../../services/actionPointService';
|
||||
import { roleLevelup } from '../../../services/normalBattleService';
|
||||
import { getSimpleRoleInfo } from '../../../services/roleService';
|
||||
@@ -30,19 +30,14 @@ import { addUserToTeamChannel, delTeamChannel, removeFromTeamChannel, sendMessag
|
||||
import { getFriendRelationType, getRecommendType } from '../../../services/friendService';
|
||||
import { FriendRelationModel } from '../../../db/FriendRelation';
|
||||
import { isHeroHidden } from '../../../services/dataService';
|
||||
import { addComTeam, clearComBtlTimer,deleteComBattle,getComTeamByCode } from '../../../services/memoryCache/comBattleData';
|
||||
|
||||
export default function(app: Application) {
|
||||
return new ComBattleHandler(app);
|
||||
}
|
||||
export class ComBattleHandler {
|
||||
constructor(private app: Application) {
|
||||
this.app.set('teamMap', this.teamMap);
|
||||
this.app.set('teamDisTimer', this.teamDisTimer);
|
||||
this.app.set('robotHurtTimer', this.robotHurtTimer);
|
||||
}
|
||||
private teamMap: Map<string, MemComBtlTeam> = new Map();
|
||||
private teamDisTimer: Map<string, NodeJS.Timer> = new Map();
|
||||
private robotHurtTimer: Map<string, NodeJS.Timer> = new Map();
|
||||
|
||||
/**
|
||||
* @description 队长创建队伍
|
||||
@@ -85,13 +80,13 @@ export class ComBattleHandler {
|
||||
delTeamChannel(teamCode);
|
||||
return resResult(STATUS.COM_BATTLE_CREATE_ERR);
|
||||
}
|
||||
this.teamMap.set(teamCode, comTeam);
|
||||
addComTeam(teamCode, comTeam)
|
||||
|
||||
// 倒计时一定时间给队长匹配机器人
|
||||
if (pub === true) {
|
||||
await addRobotsLater(comTeam, roleInfo, this.teamMap, this.teamDisTimer);
|
||||
await addRobotsLater(comTeam, roleInfo);
|
||||
}
|
||||
setDismissTimer(comTeam, this.teamMap, roleId, this.teamDisTimer);
|
||||
setDismissTimer(comTeam, roleId);
|
||||
return resResult(STATUS.SUCCESS, { teamCode, roleStatus: comTeam.roleStatus });
|
||||
}
|
||||
|
||||
@@ -146,10 +141,10 @@ export class ComBattleHandler {
|
||||
addUserToTeamChannel(teamCode, true, roleId, sid);
|
||||
|
||||
// 创建并添加机器人
|
||||
await addRobotsToTeam(comTeam, roleId, topLineupCe, playerLv, thiz.teamMap, thiz.teamDisTimer, 2);
|
||||
await addRobotsToTeam(comTeam, roleId, topLineupCe, playerLv, 2);
|
||||
|
||||
await ComBattleTeamModel.createTeam(comTeam);
|
||||
thiz.teamMap.set(teamCode, comTeam);
|
||||
addComTeam(teamCode, comTeam);
|
||||
// 机器人队伍 3 秒直接开战
|
||||
setTimeout(async () => {
|
||||
thiz.startBattle({teamCode}, session);
|
||||
@@ -183,7 +178,7 @@ export class ComBattleHandler {
|
||||
let roleId = session.get('roleId');
|
||||
let sid = session.get('sid');
|
||||
let { teamCode, isFrd } = msg;
|
||||
let teamStatus = this.teamMap.get(teamCode);
|
||||
let teamStatus = getComTeamByCode(teamCode);
|
||||
if (!teamStatus) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
||||
if(teamStatus.status !== COM_TEAM_STATUS.DEFAULT) return resResult(STATUS.COM_BATTLE_TEAM_NOT_DEFAULT);
|
||||
if (teamIsFullToStart(teamStatus)) return resResult(STATUS.COM_BATTLE_MEMBER_LIMIT);
|
||||
@@ -214,7 +209,7 @@ export class ComBattleHandler {
|
||||
addUserToTeamChannel(teamCode, false, roleId, sid);
|
||||
sendMessageToTeam(teamCode, PUSH_ROUTE.TEAM_JOIN, { teamInfo: teamStatus });
|
||||
|
||||
setDismissTimer(teamStatus, this.teamMap, roleId, this.teamDisTimer);
|
||||
setDismissTimer(teamStatus, roleId);
|
||||
return resResult(STATUS.SUCCESS, { teamInfo: teamStatus});
|
||||
}
|
||||
|
||||
@@ -229,7 +224,7 @@ export class ComBattleHandler {
|
||||
let roleId = session.get('roleId');
|
||||
let { isFrd, teamCode } = msg;
|
||||
const isFrdPre = isFrd;
|
||||
let teamStatus = this.teamMap.get(teamCode);
|
||||
let teamStatus = getComTeamByCode(teamCode);
|
||||
if (!teamStatus || teamStatus.status !== COM_TEAM_STATUS.DEFAULT) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
||||
if (teamStatus.capId === roleId) return resResult(STATUS.COM_BATTLE_SET_FRD_ERR);
|
||||
if (!isFrd) {
|
||||
@@ -305,7 +300,7 @@ export class ComBattleHandler {
|
||||
let { teamCode, heroes: hids, battleCode = 'default' } = msg;
|
||||
if (!hids || hids.length === 0) return resResult(STATUS.COM_BATTLE_HEROES_ERR);
|
||||
if(isHeroHidden(...hids)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
let teamStatus = this.teamMap.get(teamCode);
|
||||
let teamStatus = getComTeamByCode(teamCode);
|
||||
if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
||||
|
||||
const heroDBs = await HeroModel.findByHidRange(hids, roleId);
|
||||
@@ -337,7 +332,7 @@ export class ComBattleHandler {
|
||||
async rmTeammate(msg: {teamCode: string, roleIdToRm: string}, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let { teamCode, roleIdToRm } = msg;
|
||||
let teamStatus = this.teamMap.get(teamCode);
|
||||
let teamStatus = getComTeamByCode(teamCode);
|
||||
if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
||||
if (roleId === teamStatus.capId && roleId === roleIdToRm) return resResult(STATUS.COM_BATTLE_RM_SELF); // 队长移除自己视为解散,提示确认
|
||||
if (roleId !== teamStatus.capId && roleId !== roleIdToRm) return resResult(STATUS.COM_BATTLE_CAN_NOT_RM);
|
||||
@@ -360,10 +355,10 @@ export class ComBattleHandler {
|
||||
// 先推送离队消息,再将玩家从房间中移除
|
||||
sendMessageToTeam(teamCode, PUSH_ROUTE.LEAVE_TEAM, {teamCode, roleId: roleIdToRm});
|
||||
removeFromTeamChannel(teamCode, roleIdToRm);
|
||||
clearComBtlTimer(teamCode, this.teamDisTimer); // 移除队员停止解散计时
|
||||
clearComBtlTimer(teamCode); // 移除队员停止解散计时
|
||||
let thiz = this;
|
||||
setTimeout(async () => {
|
||||
let curTeamStatus = thiz.teamMap.get(teamCode);
|
||||
let curTeamStatus = getComTeamByCode(teamCode);
|
||||
if (validToJoin(curTeamStatus)) {
|
||||
let roleSt: RoleStatus;
|
||||
for (let st of curTeamStatus.roleStatus) {
|
||||
@@ -373,7 +368,7 @@ export class ComBattleHandler {
|
||||
}
|
||||
if (!roleSt) return;
|
||||
let { roleId, topLineupCe, lv } = roleSt;
|
||||
await addRobotsToTeam(curTeamStatus, roleId, topLineupCe, lv, thiz.teamMap, thiz.teamDisTimer, 3 - curTeamStatus.roleIds.length);
|
||||
await addRobotsToTeam(curTeamStatus, roleId, topLineupCe, lv, 3 - curTeamStatus.roleIds.length);
|
||||
}
|
||||
}, COM_BTL_CONST.ASSIST_TIME);
|
||||
return resResult(STATUS.SUCCESS);
|
||||
@@ -389,9 +384,9 @@ export class ComBattleHandler {
|
||||
async dismiss(msg: {teamCode: string}, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let { teamCode } = msg;
|
||||
let teamStatus = this.teamMap.get(teamCode);
|
||||
let teamStatus = getComTeamByCode(teamCode);
|
||||
if(!teamStatus) return resResult(STATUS.SUCCESS);
|
||||
let result = await dismissTeam(teamStatus, this.teamMap, roleId, this.teamDisTimer);
|
||||
let result = await dismissTeam(teamStatus, roleId);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -407,35 +402,35 @@ export class ComBattleHandler {
|
||||
let roleName = session.get('roleName');
|
||||
let sid = session.get('sid');
|
||||
let { teamCode } = msg;
|
||||
let teamStatus = this.teamMap.get(teamCode);
|
||||
let teamStatus = getComTeamByCode(teamCode);
|
||||
if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
||||
if (teamStatus.capId !== roleId && teamStatus.capId !== 'robot') return resResult(STATUS.COM_BATTLE_CAP_ONLY);
|
||||
if (teamStatus.status !== COM_TEAM_STATUS.DEFAULT) return resResult(STATUS.COM_BATTLE_ALREADY_START);
|
||||
|
||||
teamStatus.startTeam();
|
||||
startTeam(teamStatus);
|
||||
let team = await ComBattleTeamModel.updateStatusByCode(teamCode, teamStatus.status, teamStatus.startTime, teamStatus.endTime, teamStatus.hasTimeExtraReward);
|
||||
if (!team) return resResult(STATUS.COM_BATTLE_START_ERR);
|
||||
|
||||
rmCreatedTeamFromRedis(teamCode, teamStatus.lv);
|
||||
clearComBtlTimer(teamCode, this.teamDisTimer); // 战斗开始停止解散计时
|
||||
clearComBtlTimer(teamCode); // 战斗开始停止解散计时
|
||||
await getComBattleFriendAdd(teamStatus.roleStatus);
|
||||
sendMessageToTeam(teamCode, PUSH_ROUTE.COMBATTLE_START, {teamCode, roleStatus: teamStatus.roleStatus});
|
||||
// 每场倒计时结算
|
||||
let thiz = this;
|
||||
setTimeout(async () => {
|
||||
let teamStatus = thiz.teamMap.get(teamCode);
|
||||
let teamStatus = getComTeamByCode(teamCode);
|
||||
if (teamStatus && teamStatus.status === COM_TEAM_STATUS.FIGHTING) {
|
||||
clearRobotHurtTimer(teamStatus, this.robotHurtTimer);
|
||||
clearRobotHurtTimer(teamStatus);
|
||||
let team = await ComBattleTeamModel.syncTeamData({teamCode, status: COM_TEAM_STATUS.LOOSE, roleStatus: teamStatus.roleStatus, bossHpArr: teamStatus.bossHpArr}, true);
|
||||
if (!team) return resResult(STATUS.COM_BATTLE_RESULT_ERR);
|
||||
teamStatus.timeout = true;
|
||||
sendMessageToTeam(teamCode, PUSH_ROUTE.TEAM_COMPLETE, {teamCode, result: false, timeout: true});
|
||||
thiz.teamMap.delete(teamCode);
|
||||
deleteComBattle(teamCode);
|
||||
}
|
||||
}, COM_BTL_CONST.BTL_TIME_LMT);
|
||||
teamStatus.roleStatus.forEach((st, idx) => {
|
||||
if (st.isRobot === true) {
|
||||
updateRobotHurtByTime(teamStatus, st, COM_BTL_CONST.ROBOT_BASE_TIME_INTERVAL + idx, this.robotHurtTimer, this.teamMap);
|
||||
updateRobotHurtByTime(teamStatus, st, COM_BTL_CONST.ROBOT_BASE_TIME_INTERVAL + idx);
|
||||
}
|
||||
});
|
||||
await checkTaskInComBattleStart(teamStatus.roleStatus, teamStatus.capId, teamStatus.blueprtId);
|
||||
@@ -453,7 +448,7 @@ export class ComBattleHandler {
|
||||
let roleId = session.get('roleId');
|
||||
let sid = session.get('sid');
|
||||
let { teamCode, killed, bossHurts, curRnd } = msg;
|
||||
let teamStatus = this.teamMap.get(teamCode);
|
||||
let teamStatus = getComTeamByCode(teamCode);
|
||||
if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) {
|
||||
checkTeamStatusAndSend(teamCode, roleId, sid);
|
||||
return resResult(STATUS.SUCCESS);
|
||||
@@ -502,7 +497,7 @@ export class ComBattleHandler {
|
||||
// 推送本次行动情况
|
||||
const roleStatus = teamStatus.roleStatus.map(st => {return {roleId: st.roleId, totalDmg: st.totalDmg, killed: st.killed}});
|
||||
sendMessageToTeam(teamCode, PUSH_ROUTE.TEAMMATE_ACT, { teamCode, bossCurHp: teamStatus.bossCurHp, bossHpArr: teamStatus.bossHpArr, roleStatus, actRoleId: roleId, actBossHurts });
|
||||
const result = await handleComBtlProgress(teamStatus, this.robotHurtTimer, this.teamMap);
|
||||
const result = await handleComBtlProgress(teamStatus);
|
||||
if (result && result.code !== 0) return result;
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
@@ -550,7 +545,7 @@ export class ComBattleHandler {
|
||||
|
||||
let { teamCode } = msg;
|
||||
let team = await ComBattleTeamModel.getTeamByCode(teamCode);
|
||||
clearRobotHurtTimer(team, this.robotHurtTimer);
|
||||
clearRobotHurtTimer(team);
|
||||
if (!team || team.status !== COM_TEAM_STATUS.WIN) return resResult(STATUS.COM_BATTLE_REWARD_ERR);
|
||||
let { roleStatus, blueprtId, status, bossHpArr } = team;
|
||||
let roleSt = roleStatus.find(st => st && st.roleId === roleId);
|
||||
@@ -567,7 +562,7 @@ export class ComBattleHandler {
|
||||
let sid = session.get('sid');
|
||||
|
||||
let { teamCode } = msg;
|
||||
let teamStatus = this.teamMap.get(teamCode);
|
||||
let teamStatus = getComTeamByCode(teamCode);
|
||||
if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) {
|
||||
checkTeamStatusAndSend(teamCode, roleId, sid);
|
||||
return resResult(STATUS.SUCCESS);
|
||||
@@ -576,13 +571,13 @@ export class ComBattleHandler {
|
||||
return resResult(STATUS.COM_BATTLE_RETREAT_ERR)
|
||||
}
|
||||
|
||||
clearRobotHurtTimer(teamStatus, this.robotHurtTimer);
|
||||
clearRobotHurtTimer(teamStatus);
|
||||
|
||||
let team = await ComBattleTeamModel.syncTeamData({ teamCode, status: COM_TEAM_STATUS.LOOSE, roleStatus: teamStatus.roleStatus, bossHpArr: teamStatus.bossHpArr, endTime: Date.now() }, false, true);
|
||||
if (!team) return resResult(STATUS.COM_BATTLE_RESULT_ERR);
|
||||
sendMessageToTeam(teamCode, PUSH_ROUTE.TEAM_COMPLETE, { teamCode, result: false });
|
||||
|
||||
this.teamMap.delete(teamCode);
|
||||
deleteComBattle(teamCode);
|
||||
|
||||
return resResult(STATUS.SUCCESS, { teamInfo: pick(team, ['status', 'teamCode', 'roleStatus', 'bossHpArr']) });
|
||||
}
|
||||
@@ -590,7 +585,7 @@ export class ComBattleHandler {
|
||||
async getComBtlStatus(msg: {teamCode: string}, session: BackendSession) {
|
||||
let { teamCode } = msg;
|
||||
let roleStatus: RoleStatus[], status: number, bossHpArr: BossHp[], timeout: boolean, endTime = 0;
|
||||
let memTeam = this.teamMap.get(teamCode);
|
||||
let memTeam = getComTeamByCode(teamCode);
|
||||
if (memTeam) {
|
||||
({ roleStatus, status, bossHpArr, timeout, endTime } = memTeam);
|
||||
} else {
|
||||
@@ -693,7 +688,7 @@ export class ComBattleHandler {
|
||||
if (!guildCode) return resResult(STATUS.COM_BATTLE_INVITE_GUILD_ERR);
|
||||
|
||||
const { teamCode } = msg;
|
||||
let teamStatus = this.teamMap.get(teamCode);
|
||||
let teamStatus = getComTeamByCode(teamCode);
|
||||
if(!teamStatus) return resResult(STATUS.WRONG_PARMS);
|
||||
await pushTeamInviteMsg(roleId, roleName, guildCode, teamCode, teamStatus.blueprtId, teamStatus.lv, teamStatus.ceLimit);
|
||||
await ComBattleTeamModel.invite(teamCode, guildCode);
|
||||
@@ -712,7 +707,7 @@ export class ComBattleHandler {
|
||||
let guildCode = session.get('guildCode');
|
||||
const { teamCode, targetRoleId } = msg;
|
||||
|
||||
let teamStatus = this.teamMap.get(teamCode);
|
||||
let teamStatus = getComTeamByCode(teamCode);
|
||||
if(!teamStatus) return resResult(STATUS.WRONG_PARMS);
|
||||
|
||||
let role = await RoleModel.findByRoleId(targetRoleId, 'lv');
|
||||
|
||||
Reference in New Issue
Block a user