diff --git a/game-server/app/servers/guild/handler/guildBossHandler.ts b/game-server/app/servers/guild/handler/guildBossHandler.ts index e317bdef8..1bffca38f 100644 --- a/game-server/app/servers/guild/handler/guildBossHandler.ts +++ b/game-server/app/servers/guild/handler/guildBossHandler.ts @@ -4,7 +4,7 @@ import { STATUS, TASK_TYPE } from '../../../consts'; import { BossInstanceModel } from '../../../db/BossInstance'; import { BattleRecordModel } from '../../../db/BattleRecord'; import { nowSeconds, getZeroPoint } from '../../../pubUtils/timeUtil'; -import { getBossInstanceInfo, checkBossResult, checkBossBattleMemberExists, pushBossHpMessage, addBossInstance, refreshUserGuildOfBoss, refreshGuildOfBoss } from '../../../services/guildBossService'; +import { getBossInstanceInfo, checkBossResult, checkBossBattleMemberExists, pushBossHpMessage, addBossInstance, refreshUserGuildOfBoss, refreshGuildOfBoss, getRanks } from '../../../services/guildBossService'; import { findWhere } from 'underscore' import { GUILD_STRUCTURE, GUILD_BOSS_STATUS, GUILD_POINT_WAYS } from '../../../consts/constModules/guildConst'; import { DATA_NAME } from '../../../consts/dataName'; @@ -101,9 +101,10 @@ export class GuildHandler { return resResult(STATUS.GUILD_SCRIPT_NOT_OPENED); if (bossInstance.bossHp <= 0) return resResult(STATUS.GUILD_SCRIPT_IS_COMPLETE); - let myRank = findWhere(bossInstance.ranks, { roleId }); - if (!!myRank && myRank.time > getZeroPoint()) + let { myChallengeCnt } = await refreshUserGuildOfBoss(userGuild, 0, 0); + if(myChallengeCnt >= dicParam.GUILD_BOSS.GUILD_BOSS_CHALLENGE_COUNT) { return resResult(STATUS.GUILD_SCRIPT_IS_BATTLED); + } let { code: bossCode, warId, ranks, bossHp } = bossInstance; const battleCode = genCode(8); // 关卡唯一值 @@ -121,8 +122,9 @@ export class GuildHandler { } else { await BossInstanceModel.updateRank(bossCode, roleId); } - let { myChallengeCnt } = await refreshUserGuildOfBoss(userGuild, 0, 1); - return resResult(STATUS.SUCCESS, { battleCode, bossCode: bossInstance.code, myChallengeCnt }); + let { myChallengeCnt: newMyChallengeCnt } = await refreshUserGuildOfBoss(userGuild, 0, 1); + + return resResult(STATUS.SUCCESS, { battleCode, bossCode: bossInstance.code, myChallengeCnt: newMyChallengeCnt }); } async action(msg: guildInter & { bossCode: string, damage: number, battleCode: string }, session: BackendSession) { @@ -137,9 +139,10 @@ export class GuildHandler { } //记录伤害 let bossInstance = await BossInstanceModel.updateBossHp(bossCode, damage, roleId); - if(!bossInstance) return resResult(STATUS.GUILD_SCRIPT_NOT_OPENED); + if(!bossInstance) bossInstance = await BossInstanceModel.findByCode(bossCode); + if(!bossInstance) return resResult(STATUS.GUILD_SCRIPT_NOT_OPENED) await BattleRecordModel.incBossDamage(battleCode, damage, bossInstance?.bossHp); - if (!bossInstance || bossInstance.bossHp == 0) {//进入结算 + if (bossInstance.bossHp <= 0) {//进入结算 let flag = await checkBossResult(bossCode, guildCode, serverId, DATA_NAME.BOSS_SCRIPT, roleId, damage); if (!flag) { return resResult(STATUS.WRONG_PARMS); @@ -159,7 +162,7 @@ export class GuildHandler { const sid = session.get('sid'); const serverId: number = parseInt(session.get('serverId')); - const { guildCode } = userGuild; + let bossInstance = await BossInstanceModel.findByCode(bossCode); if(!bossInstance) return resResult(STATUS.WRONG_PARMS); @@ -167,20 +170,22 @@ export class GuildHandler { $set: { status: 1 }//战斗结束统一设置成1 }, true); - let { bossDamage } = battleRecord.record; // 伤害奖励 + let { bossDamage = 0 } = battleRecord.record; // 伤害奖励 let dicBossBase = gameData.bossBaseByBossLv.get(bossInstance.bossLv); let reward = dicBossBase.damageReward.map(({id, count}) => { return { id, count: Math.floor(count * bossDamage * dicBossBase.ratio / 1000 ) } }); + let battleGoods = await addItems(roleId, roleName, sid, reward); await addActive(roleId, serverId, GUILD_POINT_WAYS.BOSS_WAR);//获得活跃值 // 任务 await checkTask(roleId, sid, TASK_TYPE.GUILD_BOSS, 1, true, {}); - let result = await getBossInstanceInfo(guildCode, roleId, userGuild); + let { warId, ranks, bossHp, bossLv, status, encourageCnt } = bossInstance; + let rankInfo = getRanks(ranks, roleId); - return resResult(STATUS.SUCCESS, { ...result, battleGoods }); + return resResult(STATUS.SUCCESS, { warId, ...rankInfo, bossHp, status, bossLv, encourageCnt, encourageMax: dicBossBase.encourageSum, battleGoods }); } async encourage(msg: guildInter & { count: number }, session: BackendSession) { @@ -224,19 +229,9 @@ export class GuildHandler { async debugAddBattleTimes(msg: {}, session: BackendSession) { const roleId: string = session.get('roleId'); - let userGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode'); - if (!userGuild) - return resResult(STATUS.WRONG_PARMS); - const { guildCode: code } = userGuild; - let { ranks } = await BossInstanceModel.findBossInstance(code); - for (let i = 0; i < ranks.length; i++) { - let rank = ranks[i]; - if (rank.roleId == roleId) { - rank.time = 0; - break; - } - } - let { ranks: resRanks } = await BossInstanceModel.updateBossInstance(code, { ranks }); - return resResult(STATUS.SUCCESS, { ranks: resRanks }); + await UserGuildModel.updateInfo(roleId, { bossChallengeCnt: 0 }, {}); + + return resResult(STATUS.SUCCESS); + } } \ No newline at end of file diff --git a/game-server/app/services/guildBossService.ts b/game-server/app/services/guildBossService.ts index abd11f7a8..dfb14a3e3 100644 --- a/game-server/app/services/guildBossService.ts +++ b/game-server/app/services/guildBossService.ts @@ -32,7 +32,7 @@ export async function getBossInstanceInfo(guildCode: string, roleId:string, user // 此处showParamObj一定要放在最前 return { ...showParamObj, warId, ...rankInfo, bossHp, status, bossLv, encourageCnt, encourageMax: dicBossBase.encourageSum,...refObj }; } else { - return showParamObj; + return { ...showParamObj, ...refObj }; } } @@ -77,7 +77,7 @@ export function getRanks(ranks: {roleId: string; score: number; time: number; jo if (roleId == battleRoleId) { myRank = { roleId, score, rankLv: index + 1 }; } - return {roleId, score, rankLv: index + 1}; + return {roleId: battleRoleId, score, rankLv: index + 1}; }); return { ranks: lastRanks, myRank } }