优化:抽象推送方法
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { MemComBtlTeam } from './../domain/battleField/ComBattleTeamField';
|
||||
import { ItemModel } from './../db/Item';
|
||||
import { ITEM_CHANGE_REASON, IT_TYPE } from './../consts';
|
||||
import { ITEM_CHANGE_REASON, IT_TYPE, PUSH_ROUTE } from './../consts';
|
||||
import { FriendRelationModel } from './../db/FriendRelation';
|
||||
import { RoleModel, RoleType } from './../db/Role';
|
||||
import { EquipPrintDropType, EquipPrintDropModel } from './../db/EquipPrintDrop';
|
||||
@@ -14,11 +14,10 @@ import { TREASURE, EXTERIOR } from '../pubUtils/dicParam';
|
||||
import { getFriendLvAdd } from './friendService';
|
||||
import { getRoleIds } from '../pubUtils/friendUtil';
|
||||
import { getTeamSearchByLv, rmRoleFromQueue } from './redisService';
|
||||
import { addUserToChannel } from './roleService';
|
||||
import { ChannelUser } from '../domain/ChannelUser';
|
||||
import { getRewardByBlueprtId, gameData, getBossHpByBlueprtId, getDicBlueprtById } from '../pubUtils/data';
|
||||
import { getZeroPointD, nowSeconds } from '../pubUtils/timeUtil';
|
||||
import { handleCost } from './role/rewardService';
|
||||
import { addUserToTeamChannel, delTeamChannel, sendMessageToTeam, sendMessageToUsersWithSuc } from './pushService';
|
||||
|
||||
/**
|
||||
* 在给定的品质列表中随机返回一定数量的藏宝图Id
|
||||
@@ -213,7 +212,7 @@ function updateRobotKilled(bossHp: number, roleSt: RoleStatus) {
|
||||
}
|
||||
}
|
||||
|
||||
export async function handleComBtlProgress(teamStatus: MemComBtlTeam, robotHurtTimer: Map<string, NodeJS.Timer>, teamMap: Map<string, MemComBtlTeam>, channel: Channel) {
|
||||
export async function handleComBtlProgress(teamStatus: MemComBtlTeam, robotHurtTimer: Map<string, NodeJS.Timer>, teamMap: Map<string, MemComBtlTeam>) {
|
||||
const { teamCode } = teamStatus;
|
||||
// 判断战斗是否结束
|
||||
let battleSt = checkComBattleResult(teamStatus);
|
||||
@@ -233,18 +232,12 @@ export async function handleComBtlProgress(teamStatus: MemComBtlTeam, robotHurtT
|
||||
|
||||
// 战斗胜利队长扣减藏宝图
|
||||
if (result && teamStatus.capId != 'robot') {
|
||||
const { sid } = channel.getMember(teamStatus.capId);
|
||||
let res = await handleCost(teamStatus.capId, sid, [{ id: teamStatus.blueprtId, count: 1 }], ITEM_CHANGE_REASON.COM_BATTLE_USE_BLUEPRT);
|
||||
let res = await handleCost(teamStatus.capId, teamStatus.sid, [{ id: teamStatus.blueprtId, count: 1 }], ITEM_CHANGE_REASON.COM_BATTLE_USE_BLUEPRT);
|
||||
if (res === false) return resResult(STATUS.COM_BATTLE_BLUEPRT_NOT_ENOUGH);
|
||||
}
|
||||
// // 为了背包显示,队长藏宝图在创建队伍的时候就扣掉了,如果输了,返还藏宝图
|
||||
// if (!result && teamStatus.capId != 'robot') {
|
||||
// const { sid } = channel.getMember(teamStatus.capId);
|
||||
// await addItems(teamStatus.capId, teamStatus.capId, sid, [{ id: teamStatus.blueprtId, count: 1 }]);
|
||||
// }
|
||||
|
||||
clearRobotHurtTimer(teamStatus, robotHurtTimer);
|
||||
channel.pushMessage('onTeamComplete', resResult(STATUS.SUCCESS, { teamCode, result }));
|
||||
sendMessageToTeam(teamCode, PUSH_ROUTE.TEAM_COMPLETE, { teamCode, result });
|
||||
|
||||
teamMap.delete(teamCode);
|
||||
}
|
||||
@@ -256,7 +249,7 @@ export async function handleComBtlProgress(teamStatus: MemComBtlTeam, robotHurtT
|
||||
* @param {*} teamStatus 要更新的队伍信息
|
||||
* @param {RoleStatus} roleSt 要更新的玩家信息
|
||||
*/
|
||||
export function updateRobotHurt(teamStatus: MemComBtlTeam, roleSt: RoleStatus, channel: Channel) {
|
||||
export function updateRobotHurt(teamStatus: MemComBtlTeam, roleSt: RoleStatus) {
|
||||
// 机器人的伤害为:boss 血量的一定比例,平均到一定回合数内,再平均到每个敌军,上下浮动一定比例
|
||||
let eachHurtHp = robotEachHurt(teamStatus.bossHp, teamStatus.bossHpArr.length);
|
||||
let robotTotalHurt = 0;
|
||||
@@ -277,7 +270,7 @@ export function updateRobotHurt(teamStatus: MemComBtlTeam, roleSt: RoleStatus, c
|
||||
teamStatus.bossCurHp -= robotTotalHurt;
|
||||
roleSt.totalDmg += robotTotalHurt;
|
||||
updateRobotKilled(teamStatus.bossHp, roleSt);
|
||||
channel.pushMessage('onTeammateAct', resResult(STATUS.SUCCESS, { teamCode: teamStatus.teamCode, bossCurHp: teamStatus.bossCurHp, bossHpArr: teamStatus.bossHpArr, roleStatus: teamStatus.roleStatus, actRoleId: roleSt.roleId, actBossHurts }));
|
||||
sendMessageToTeam(teamStatus.teamCode, PUSH_ROUTE.TEAMMATE_ACT, { teamCode: teamStatus.teamCode, bossCurHp: teamStatus.bossCurHp, bossHpArr: teamStatus.bossHpArr, roleStatus: teamStatus.roleStatus, actRoleId: roleSt.roleId, actBossHurts });
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -289,13 +282,13 @@ export function updateRobotHurt(teamStatus: MemComBtlTeam, roleSt: RoleStatus, c
|
||||
* @param {Channel} channel
|
||||
* @param {Map<string, NodeJS.Timer>} robotHurtTimer
|
||||
*/
|
||||
export function updateRobotHurtByTime(teamStatus: MemComBtlTeam, roleSt: RoleStatus, interval: number, channel: Channel, robotHurtTimer: Map<string, NodeJS.Timer>, teamMap: Map<string, MemComBtlTeam>) {
|
||||
export function updateRobotHurtByTime(teamStatus: MemComBtlTeam, roleSt: RoleStatus, interval: number, robotHurtTimer: Map<string, NodeJS.Timer>, teamMap: Map<string, MemComBtlTeam>) {
|
||||
const timerKey = `${teamStatus.teamCode}_${roleSt.roleId}`;
|
||||
const robotTimer = setInterval(() => {
|
||||
const robotTotalHurt = teamStatus.bossHp * COM_BTL_CONST.ROBOT_HURT_RATIO;
|
||||
if (roleSt.totalDmg < robotTotalHurt && teamStatus.bossCurHp > 0 && teamMap.has(teamStatus.teamCode)) {
|
||||
updateRobotHurt(teamStatus, roleSt, channel);
|
||||
handleComBtlProgress(teamStatus, robotHurtTimer, teamMap, channel);
|
||||
updateRobotHurt(teamStatus, roleSt);
|
||||
handleComBtlProgress(teamStatus, robotHurtTimer, teamMap);
|
||||
} else {
|
||||
clearInterval(robotTimer);
|
||||
}
|
||||
@@ -337,7 +330,7 @@ export function comBtlLvInvalid(playerLv: number, blueprtLvs: number[]) {
|
||||
return true
|
||||
}
|
||||
|
||||
export async function dismissTeam(teamStatus: MemComBtlTeam, teamMap: Map<string, MemComBtlTeam>, roleId: string, teamDisTimer: Map<string, NodeJS.Timer>, channel) {
|
||||
export async function dismissTeam(teamStatus: MemComBtlTeam, teamMap: Map<string, MemComBtlTeam>, roleId: string, teamDisTimer: Map<string, NodeJS.Timer>) {
|
||||
const { teamCode } = teamStatus;
|
||||
if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
||||
if (teamStatus.status !== COM_TEAM_STATUS.DEFAULT) return resResult(STATUS.COM_BATTLE_DISSMISS_ERR);
|
||||
@@ -349,17 +342,17 @@ export async function dismissTeam(teamStatus: MemComBtlTeam, teamMap: Map<string
|
||||
let rmSt = teamMap.delete(teamCode);
|
||||
if (!rmSt) return resResult(STATUS.COM_BATTLE_DISSMISS_ERR);
|
||||
|
||||
channel.pushMessage('onTeamDismiss', resResult(STATUS.SUCCESS, { teamCode }));
|
||||
channel.destroy();
|
||||
sendMessageToTeam(teamCode, PUSH_ROUTE.TEAM_DISMISS, { teamCode });
|
||||
delTeamChannel(teamCode);
|
||||
clearComBtlTimer(teamCode, teamDisTimer); // 队伍解散停止解散计时
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
export function setDismissTimer(teamStatus: MemComBtlTeam, teamMap: Map<string, MemComBtlTeam>, roleId: string, teamDisTimer: Map<string, NodeJS.Timer>, channel) {
|
||||
export function setDismissTimer(teamStatus: MemComBtlTeam, teamMap: Map<string, MemComBtlTeam>, roleId: string, teamDisTimer: Map<string, NodeJS.Timer>) {
|
||||
if (teamIsFullToStart(teamStatus)) {
|
||||
clearComBtlTimer(teamStatus.teamCode, teamDisTimer);
|
||||
let timer = setTimeout(async () => {
|
||||
await dismissTeam(teamStatus, teamMap, roleId, teamDisTimer, channel);
|
||||
await dismissTeam(teamStatus, teamMap, roleId, teamDisTimer);
|
||||
}, COM_BTL_CONST.CAP_START_TIME);
|
||||
teamDisTimer.set(teamStatus.teamCode, timer);
|
||||
}
|
||||
@@ -563,7 +556,7 @@ export function addRoleStToTeam(comTeam: MemComBtlTeam, roleSt: RoleStatus) {
|
||||
* @param {string} sid 当前用户 sid
|
||||
* @returns
|
||||
*/
|
||||
export async function addValidSearchingRoles(comTeam: MemComBtlTeam, channelService: ChannelService) {
|
||||
export async function addValidSearchingRoles(comTeam: MemComBtlTeam) {
|
||||
const { lv } = getDicBlueprtById(comTeam.blueprtId);
|
||||
let teammates = await getTeamSearchByLv(lv);
|
||||
if (teammates && teammates.length) {
|
||||
@@ -573,10 +566,9 @@ export async function addValidSearchingRoles(comTeam: MemComBtlTeam, channelServ
|
||||
if (!st) continue;
|
||||
await rmRoleFromQueue(teammateRoleId, sid); // 匹配成功后删除redis中该用户的匹配记录
|
||||
addRoleStToTeam(comTeam, st);
|
||||
const channel = channelService.getChannel(comTeam.teamCode, false);
|
||||
addUserToChannel(channel, new ChannelUser(teammateRoleId, sid));
|
||||
addUserToTeamChannel(comTeam.teamCode, false, teammateRoleId, sid);
|
||||
}
|
||||
channelService.pushMessageByUids('onTeamJoin', resResult(STATUS.SUCCESS, { teamInfo: comTeam }), teammates.map(t => { return { uid: t.roleId, sid: t.sid } }));
|
||||
sendMessageToUsersWithSuc(PUSH_ROUTE.TEAM_JOIN, { teamInfo: comTeam }, teammates.map(t => { return { uid: t.roleId, sid: t.sid } }));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -609,7 +601,7 @@ export function teamIsFullToStart(comTeam: MemComBtlTeam) {
|
||||
* @param {number} roleLv 真实玩家等级,用来做机器人等级基准
|
||||
* @param {number} [count=1]
|
||||
*/
|
||||
export async function addRobotsToTeam(comTeam: MemComBtlTeam, roleId: string, roleCe: number, roleLv: number, teamMap: Map<string, MemComBtlTeam>, teamDisTimer: Map<string, NodeJS.Timer>, channel: Channel, count = 1) {
|
||||
export async function addRobotsToTeam(comTeam: MemComBtlTeam, roleId: string, roleCe: number, roleLv: number, teamMap: Map<string, MemComBtlTeam>, teamDisTimer: Map<string, NodeJS.Timer>, count = 1) {
|
||||
const { teamCode, roleStatus } = comTeam;
|
||||
let hasCap = roleStatus.findIndex(cur => cur.isCap) != -1;
|
||||
const { robotStArr, robotIdArr } = getRandComBtlRobots(roleCe, comTeam.ceLimit, roleLv, count);
|
||||
@@ -621,8 +613,8 @@ export async function addRobotsToTeam(comTeam: MemComBtlTeam, roleId: string, ro
|
||||
addRoleStToTeam(comTeam, st);
|
||||
await ComBattleTeamModel.addRole(teamCode, st);
|
||||
}
|
||||
channel.pushMessage('onTeamJoin', resResult(STATUS.SUCCESS, { teamInfo: comTeam }));
|
||||
setDismissTimer(comTeam, teamMap, roleId, teamDisTimer, channel);
|
||||
sendMessageToTeam(teamCode, PUSH_ROUTE.TEAM_JOIN, { teamInfo: comTeam })
|
||||
setDismissTimer(comTeam, teamMap, roleId, teamDisTimer);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -632,9 +624,8 @@ export async function addRobotsToTeam(comTeam: MemComBtlTeam, roleId: string, ro
|
||||
* @param {RoleType} roleInfo
|
||||
* @param {Map<string, MemComBtlTeam>} teamMap
|
||||
* @param {Map<string, NodeJS.Timer>} teamDisTimer
|
||||
* @param {Channel} channel
|
||||
*/
|
||||
export async function addRobotsLater(comTeam: MemComBtlTeam, roleInfo: RoleType, teamMap: Map<string, MemComBtlTeam>, teamDisTimer: Map<string, NodeJS.Timer>, channel: Channel) {
|
||||
export async function addRobotsLater(comTeam: MemComBtlTeam, roleInfo: RoleType, teamMap: Map<string, MemComBtlTeam>, teamDisTimer: Map<string, NodeJS.Timer>) {
|
||||
const teamStatus = comTeam;
|
||||
const { teamCode } = teamStatus;
|
||||
const { roleId, lv } = roleInfo;
|
||||
@@ -647,7 +638,7 @@ export async function addRobotsLater(comTeam: MemComBtlTeam, roleInfo: RoleType,
|
||||
setTimeout(async () => {
|
||||
const curTeamStatus = teamMap.get(teamCode);
|
||||
if (validToJoin(curTeamStatus)) {
|
||||
await addRobotsToTeam(curTeamStatus, roleId, topLineupCe, lv, teamMap, teamDisTimer, channel, 1);
|
||||
await addRobotsToTeam(curTeamStatus, roleId, topLineupCe, lv, teamMap, teamDisTimer, 1);
|
||||
}
|
||||
}, joinTime);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user