diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index 949b1daf8..c4067ba26 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -2,12 +2,10 @@ * @Author: 梁桐川 * @Date: 2020-11-30 15:05:48 * @Last Modified by: 梁桐川 - * @Last Modified time: 2020-12-03 16:17:18 + * @Last Modified time: 2020-12-03 16:50:27 */ -import { COM_BATTLE_ASSIST_TIME, COM_BATTLE_ROBOT_ROUND_LMT, COM_BATTLE_ROBOT_HURT_RATIO, COM_BATTLE_ROBOT_HURT_CH_RATIO, COM_TEAM_STATUS } from './../../../consts/consts'; -import { IT_TYPE, GOLD_COST_RATIO, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_BATTLE_CAP_TIME, COM_BATTLE_TIME_LMT, COM_BATTLE_CAP_START_TIME, COM_BATTLE_ASSIST_REWARD_RATIO } from './../../../consts/consts'; +import { IT_TYPE, GOLD_COST_RATIO, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST } from './../../../consts/consts'; import { getGoodById, getBossHpByBlueprtId, getComBtlSetByQuality, getBlueprtComposeByQuality, getBluePrtByQuality, getWarById, getWarIdByBlueprtId } from '../../../pubUtils/gamedata'; -import { COM_TEAM_ENABLE_LV } from '../../../consts/consts'; import { ComBattleTeamModel, BossHp } from '../../../db/ComBattleTeam'; import Role, { RoleModel } from '../../../db/Role'; import { STATUS } from '../../../consts/statusCode'; @@ -97,7 +95,7 @@ export class ComBattleHandler { // 检查藏宝图是否足够 let { lv, headHid = 19, topFiveCe = 100, sHid = 19 } = await RoleModel.findByRoleId(roleId); - if (lv < COM_TEAM_ENABLE_LV) return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH); + if (lv < COM_BTL_CONST.ENABLE_LV) return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH); let blueprt = await ItemModel.findbyRoleAndGidAndCount(roleId, blueprtId, 1); if (!blueprt) return resResult(STATUS.COM_BATTLE_BLUEPRT_NOT_FOUND); @@ -174,14 +172,14 @@ export class ComBattleHandler { if (team && team.roleIds && team.roleIds.length === 3) { let timer = setTimeout(async () => { thiz.dismiss({teamCode}, session); - }, COM_BATTLE_CAP_START_TIME); + }, COM_BTL_CONST.CAP_START_TIME); thiz.teamDisTimer.set(teamCode, timer); } - }, COM_BATTLE_CAP_TIME); + }, COM_BTL_CONST.CAP_TIME); if (team.roleIds && team.roleIds.length === 3) { let timer = setTimeout(async () => { thiz.dismiss({teamCode}, session); - }, COM_BATTLE_CAP_START_TIME); + }, COM_BTL_CONST.CAP_START_TIME); thiz.teamDisTimer.set(teamCode, timer); } return resResult(STATUS.SUCCESS, { teamCode, roleStatus }); @@ -256,7 +254,7 @@ export class ComBattleHandler { await ComBattleTeamModel.updateStatus(teamCode, COM_TEAM_STATUS.FIGHTING); channelService.pushMessageByUids('onComBtlStart', {teamCode, roleStatus: comTeam.roleStatus}, [{uid: roleId, sid}]); }, 3000); - }, COM_BATTLE_ASSIST_TIME); + }, COM_BTL_CONST.ASSIST_TIME); return resResult(STATUS.SUCCESS); } @@ -278,7 +276,7 @@ export class ComBattleHandler { let { lv = 1, headHid = 19, topFiveCe = 0, sHid = 19 } = await Role.findByRoleId(roleId); let { quality } = getGoodById(teamStatus.blueprtId); let { assistanceLevel, assistanceTime } = getComBtlSetByQuality(quality); - if (lv < COM_TEAM_ENABLE_LV) { + if (lv < COM_BTL_CONST.ENABLE_LV) { return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH); } else if (lv < assistanceLevel) { return resResult(STATUS.COM_BATTLE_ASSIST_LV_NOT_ENOUGH); @@ -309,7 +307,7 @@ export class ComBattleHandler { let thiz = this; let timer = setTimeout(async () => { thiz.dismiss({teamCode}, session); - }, COM_BATTLE_CAP_START_TIME); + }, COM_BTL_CONST.CAP_START_TIME); thiz.teamDisTimer.set(teamCode, timer); } return resResult(STATUS.SUCCESS, { teamInfo: teamStatus}); @@ -323,7 +321,7 @@ export class ComBattleHandler { async getTeams(msg: { blueprtIds: Array }, session: BackendSession) { let roleId = session.get('roleId'); let { lv } = await Role.findByRoleId(roleId); - if (lv < COM_TEAM_ENABLE_LV) return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH); + if (lv < COM_BTL_CONST.ENABLE_LV) return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH); const teams = await ComBattleTeamModel.getTeamByBlueprt(msg.blueprtIds, COM_TEAM_STATUS.DEFAULT, true); if (!teams) return resResult(STATUS.COM_BATTLE_NO_VALID_TEAM); return resResult(STATUS.SUCCESS, { teamInfos: teams}); @@ -508,7 +506,7 @@ export class ComBattleHandler { if (!team) return resResult(STATUS.COM_BATTLE_RESULT_ERR); channel.pushMessage('onTeamComplete', {teamCode, result: false}); } - }, COM_BATTLE_TIME_LMT); + }, COM_BTL_CONST.BTL_TIME_LMT); return resResult(STATUS.SUCCESS); } @@ -557,9 +555,9 @@ export class ComBattleHandler { }); } roleSt.totalDmg += totalHurtHp; - } else if (curRnd > teamStatus.curRnd && curRnd <= COM_BATTLE_ROBOT_ROUND_LMT && roleSt.isRobot) { + } else if (curRnd > teamStatus.curRnd && curRnd <= COM_BTL_CONST.ROBOT_RND_LMT && roleSt.isRobot) { // 机器人的伤害为:boss 血量的一定比例,平均到一定回合数内,再平均到每个敌军,上下浮动一定比例 - let eachHurtHp = getRandValue(teamStatus.bossHp / COM_BATTLE_ROBOT_ROUND_LMT * COM_BATTLE_ROBOT_HURT_RATIO / 5, COM_BATTLE_ROBOT_HURT_CH_RATIO, 0); + let eachHurtHp = getRandValue(teamStatus.bossHp / COM_BTL_CONST.ROBOT_RND_LMT * COM_BTL_CONST.ROBOT_HURT_RATIO / 5, COM_BTL_CONST.ROBOT_HURT_CH_RATIO, 0); let robotTotalHurt = 0; teamStatus.bossHpArr.forEach(boss => { if (boss.curHp >= eachHurtHp) { @@ -573,7 +571,7 @@ export class ComBattleHandler { teamStatus.bossCurHp -= robotTotalHurt; roleSt.totalDmg += robotTotalHurt; // 输出回合一到机器人武将集体阵亡 - if (curRnd === COM_BATTLE_ROBOT_ROUND_LMT) { + if (curRnd === COM_BTL_CONST.ROBOT_RND_LMT) { roleSt.killed === roleSt.heroes; } } diff --git a/game-server/app/services/comBattleService.ts b/game-server/app/services/comBattleService.ts index f58dbbd8b..cf24ae967 100644 --- a/game-server/app/services/comBattleService.ts +++ b/game-server/app/services/comBattleService.ts @@ -1,6 +1,6 @@ import { FriendPointModel } from './../db/FriendPoint'; import { STATUS } from './../consts/statusCode'; -import { COM_BATTLE_ROBOT_ID_NAME, COM_BATTLE_ROBOT_CE_RATIO, COM_BATTLE_ROBOT_ROUND_LMT, COM_BATTLE_ROBOT_HURT_RATIO, COM_BATTLE_ROBOT_HURT_CH_RATIO, COM_TEAM_STATUS, COM_BATTLE_ASSIST_REWARD_RATIO, COM_BATTLE_FRDCNT_MAX, COM_BATTLE_FRDCNT_DROP, CURRENCY_BY_TYPE, CURRENCY_TYPE, FRIEND_DROP_TYPE } from './../consts/consts'; +import { COM_BATTLE_ROBOT_ID_NAME, COM_TEAM_STATUS, CURRENCY_BY_TYPE, CURRENCY_TYPE, FRIEND_DROP_TYPE, COM_BTL_CONST, FRIEND_DROP_MAX } from './../consts/consts'; import { RoleStatus, ComBattleTeamModel } from './../db/ComBattleTeam'; import { getBluePrtByQuality, getComBtlSetByQuality, getRewardByBlueprtId, getWarById, getWarIdByBlueprtId } from "../pubUtils/gamedata"; import { getRandEelm, getRandValue, resResult, ratioReward } from "../pubUtils/util"; @@ -27,8 +27,8 @@ export function getRandComBtlRobots(topFiveCe: number, lv: number, cnt: number) // 创建并添加机器人 let robotStArr = [], robotIdArr = []; for (let robot of robotHeroes) { - const robotCe = getRandValue(topFiveCe || 0, COM_BATTLE_ROBOT_CE_RATIO, 0); - const robotLv = getRandValue(lv, COM_BATTLE_ROBOT_CE_RATIO, 0); + const robotCe = getRandValue(topFiveCe || 0, COM_BTL_CONST.ROBOT_CE_RATIO, 0); + const robotLv = getRandValue(lv, COM_BTL_CONST.ROBOT_CE_RATIO, 0); const imgHid = robot[Math.floor(Math.random() * robot.length)]; const { robotRoleId, robotRoleName } = COM_BATTLE_ROBOT_ID_NAME[Math.floor(Math.random() * COM_BATTLE_ROBOT_ID_NAME.length)]; let robotStatus = new RoleStatus(robotRoleId, robotRoleName, false, false, imgHid, imgHid, robotCe, robotLv, robot, true); @@ -54,11 +54,11 @@ export function checkComBattleResult(teamStatus) { } }); // 没有活人的话看看还有没有机器人没打完伤害 - if (allPlayerKilled && teamStatus.curRnd < COM_BATTLE_ROBOT_ROUND_LMT) { + if (allPlayerKilled && teamStatus.curRnd < COM_BTL_CONST.ROBOT_RND_LMT) { teamStatus.roleStatus.forEach(st => { if (st.isRobot) { - const deltaRnd = COM_BATTLE_ROBOT_ROUND_LMT - teamStatus.curRnd; - let hurtHp = getRandValue(teamStatus.bossHp / COM_BATTLE_ROBOT_ROUND_LMT * COM_BATTLE_ROBOT_HURT_RATIO, COM_BATTLE_ROBOT_HURT_CH_RATIO, 0) * deltaRnd; // 1 个机器人对 boss 造成的总伤害 + const deltaRnd = COM_BTL_CONST.ROBOT_RND_LMT - teamStatus.curRnd; + let hurtHp = getRandValue(teamStatus.bossHp / COM_BTL_CONST.ROBOT_RND_LMT * COM_BTL_CONST.ROBOT_HURT_RATIO, COM_BTL_CONST.ROBOT_HURT_CH_RATIO, 0) * deltaRnd; // 1 个机器人对 boss 造成的总伤害 robotRestHurt += hurtHp; } }) @@ -96,9 +96,8 @@ export async function checkComBattleDrop(roleId: string, battleCode: string) { if (!roleSt.isCap) { if (roleSt.isFrd) { fixReward = '&'; - // TODO: 消耗品情谊点添加 } else { - fixReward = ratioReward(fixReward, COM_BATTLE_ASSIST_REWARD_RATIO); + fixReward = ratioReward(fixReward, COM_BTL_CONST.ASSIST_REWARD_RATIO); } } await ComBattleTeamModel.updateRewardSt(team.teamCode, roleId, true); @@ -126,15 +125,15 @@ export async function getRealReward(blueprtId: number, roleSt: RoleStatus) { if (!roleSt.isCap) { if (roleSt.isFrd) { let frdPointRec = await FriendPointModel.getFrdPointRecToday(roleSt.roleId, FRIEND_DROP_TYPE.COM_BATTLE); - if (!frdPointRec || frdPointRec.cnt <= COM_BATTLE_FRDCNT_MAX - COM_BATTLE_FRDCNT_DROP) { - fixRewardStr = `${CURRENCY_BY_TYPE.get(CURRENCY_TYPE.FRIEND_POINT)}&${COM_BATTLE_FRDCNT_DROP}`; - } else if (frdPointRec.cnt < COM_BATTLE_FRDCNT_MAX) { - fixRewardStr = `${CURRENCY_BY_TYPE.get(CURRENCY_TYPE.FRIEND_POINT)}&${COM_BATTLE_FRDCNT_DROP - frdPointRec.cnt}`; + if (!frdPointRec || frdPointRec.cnt <= FRIEND_DROP_MAX.COM_BTL - COM_BTL_CONST.FRDCNT_DROP) { + fixRewardStr = `${CURRENCY_BY_TYPE.get(CURRENCY_TYPE.FRIEND_POINT)}&${COM_BTL_CONST.FRDCNT_DROP}`; + } else if (frdPointRec.cnt < FRIEND_DROP_MAX.COM_BTL) { + fixRewardStr = `${CURRENCY_BY_TYPE.get(CURRENCY_TYPE.FRIEND_POINT)}&${COM_BTL_CONST.FRDCNT_DROP - frdPointRec.cnt}`; } else { fixRewardStr = '&'; } } else { - fixRewardStr = ratioReward(fixRewardStr, COM_BATTLE_ASSIST_REWARD_RATIO); + fixRewardStr = ratioReward(fixRewardStr, COM_BTL_CONST.ASSIST_REWARD_RATIO); } } return fixRewardStr; diff --git a/shared/consts/consts.ts b/shared/consts/consts.ts index f4b61e603..bada84eb3 100644 --- a/shared/consts/consts.ts +++ b/shared/consts/consts.ts @@ -273,40 +273,23 @@ export const COM_TEAM_STATUS = { LOOSE: 3 } -// 功能开启等级 -export const COM_TEAM_ENABLE_LV = 1; -// 助战掉落占队长掉落的比例 -export const COM_ASSIST_DROP_RATE = 0.5; -// 藏宝图伪随机所需体力 -export const COM_BLUEPRT_DROP_PER_AP = 10; -// 每局时长限制 -export const COM_BATTLE_TIME_LMT = 10 * 60 * 1000; -// 机器人生成时间,秒 -// export const COM_BATTLE_ROBOT_TIME_LMT = 1; -// 每个机器人消耗 boss 血量百分比 -export const COM_BATTLE_ROBOT_HURT_RATE = 0.4; -// 每个机器人消耗 boss 血量百分比浮动范围 -export const COM_BATTLE_ROBOT_HURT_RAND_RATE = 0.05; -// 每日情谊点上限 -export const COM_BATTLE_FRDCNT_MAX = 150; -// 情谊点掉落数量 -export const COM_BATTLE_FRDCNT_DROP = 10; -// 机器人战力上下浮动百分比 -export const COM_BATTLE_ROBOT_CE_RATIO = 0.2; -// 助战匹配机器人的等待时长 -export const COM_BATTLE_ASSIST_TIME = 60 * 1000; -// 队长匹配机器人的等待时长 -export const COM_BATTLE_CAP_TIME = 60 * 1000; -// 人齐后队长开始时长倒计时 -export const COM_BATTLE_CAP_START_TIME = 60 * 1000; -// 机器人输出伤害的回合数 -export const COM_BATTLE_ROBOT_ROUND_LMT = 10; -// 单个机器人输出总伤害占 boss 血量比重 -export const COM_BATTLE_ROBOT_HURT_RATIO = 0.2; -// 机器人伤害上下浮动的比例 -export const COM_BATTLE_ROBOT_HURT_CH_RATIO = 0.1; -// 队员奖励比例 -export const COM_BATTLE_ASSIST_REWARD_RATIO = 0.5; +// 寻宝配置常量 +export const COM_BTL_CONST = { + ENABLE_LV: 1, // 功能开启等级 + ASSIST_DROP_RATE: 0.5, // 助战掉落占队长掉落的比例 + BLUEPRT_DROP_PER_AP: 10, // 藏宝图伪随机所需体力 + BTL_TIME_LMT: 10 * 60 * 1000, // 每局时长限制 + ROBOT_HURT_RAND_RATE: 0.05, // 每个机器人消耗 boss 血量百分比浮动范围 + FRDCNT_DROP: 10, // 每场情谊点掉落 + ROBOT_CE_RATIO: 0.2, // 机器人战力上下浮动百分比 + ASSIST_TIME: 60 * 1000, // 助战匹配机器人的等待时长 + CAP_TIME: 60 * 1000, // 队长匹配机器人的等待时长 + CAP_START_TIME: 60 * 1000, // 人齐后队长开始时长倒计时 + ROBOT_RND_LMT: 10, // 机器人输出伤害的回合数 + ROBOT_HURT_RATIO: 0.2, // 单个机器人输出总伤害占 boss 血量比重 + ROBOT_HURT_CH_RATIO: 0.1, // 机器人伤害上下浮动的比例 + ASSIST_REWARD_RATIO: 0.5, // 队员奖励比例 +} // 机器人名字随机 export const COM_BATTLE_ROBOT_ID_NAME = [ @@ -335,4 +318,9 @@ export const FUNCS_ID = { export const FRIEND_DROP_TYPE = { COM_BATTLE: 1 +} + +// 每日情谊点上限 +export const FRIEND_DROP_MAX = { + COM_BTL: 150 } \ No newline at end of file