diff --git a/game-server/app/services/guildActivity/guildActivityService.ts b/game-server/app/services/guildActivity/guildActivityService.ts index 296a935aa..d2b8f16b3 100644 --- a/game-server/app/services/guildActivity/guildActivityService.ts +++ b/game-server/app/services/guildActivity/guildActivityService.ts @@ -742,7 +742,7 @@ export async function getCityActivityGateHp(serverId: number, cityId: number) { // 单个玩家的平均攻击力 let playerAtkResult = await getPlayerAtkAvg(activePlayers); if (!playerAtkResult) return dicCityActivity.hp; - let { playerAtkAvg } = playerAtkResult; + let { playerAtkAvg, playerAtkSum, playerCnt } = playerAtkResult; // *单个玩家5回合造成的总伤害=单个玩家的平均攻击力*倍数*5(综合技能次级属性算出的倍数) let player5Damage = playerAtkAvg * ratio * 5; @@ -759,7 +759,7 @@ export async function getCityActivityGateHp(serverId: number, cityId: number) { gateHp = dicCityActivity.hp; } - saveGuildGateHpLog(serverId, cityId, { activePlayerCnt, activePlayerCe, activeTopPlayerCnt, activeGuildCnt, ratio, playerAtkAvg, player5Damage, guildPlayerCntAvg, cityRatio, gateHp }); + saveGuildGateHpLog(serverId, cityId, { activePlayerCnt, activePlayerCe, activeTopPlayerCnt, activeGuildCnt, ratio, playerAtkSum, playerCnt, playerAtkAvg, player5Damage, guildPlayerCntAvg, cityRatio, gateHp }); return gateHp; } @@ -784,8 +784,8 @@ async function getPlayerAtkAvg(activePlayers: ActivePlayer[]) { playerCnt++; } if (playerCnt == 0) return false; - let playerAtkAvg = playerAtkSum / playerCnt * 10; - return { playerAtkAvg, playerCnt }; + let playerAtkAvg = playerAtkSum / playerCnt; + return { playerAtkSum, playerAtkAvg, playerCnt }; } async function getGuildPlayerCntAvg (serverId: number, activePlayerCnt: number, activeGuildCnt: number) { diff --git a/game-server/app/services/guildBossService.ts b/game-server/app/services/guildBossService.ts index a90c5c5ec..492df9472 100644 --- a/game-server/app/services/guildBossService.ts +++ b/game-server/app/services/guildBossService.ts @@ -204,13 +204,13 @@ export async function getBossHp(serverId: number, guildCode: string, dicBossBase if (!playerAtkResult) return { ratio: 1, bossHp: zoomInDamage(minBossHp) }; // *军团的玩家人数=开启前一天军团内登录的玩家数 // *单个玩家的平均攻击力=军团前一天活跃玩家中最强6人排名前10的玩家的最强6人的攻击之和/10 - let { playerAtkAvg, playerCnt, activeCe } = playerAtkResult; + let { playerAtkAvg, playerCnt, activeCe, activePlayerCnt, playerAtkSum } = playerAtkResult; // 倍数按开服天数变化 let ratio = await getBossHpRatioByServer(BOSS_HP_RATIO_TYPE.BOSS_RATIO, serverId); // *单个玩家10回合造成的总伤害=单个玩家的平均攻击力*倍数*10 let player10Damage = playerAtkAvg * ratio * 10; // boss血量=单个玩家10回合造成的总伤害*军团的玩家人数*2 - let bossHp = Math.floor(player10Damage * playerCnt * 2); + let bossHp = Math.floor(player10Damage * activePlayerCnt * 2); let B = getB(warId, bossLv, activeCe, playerCnt); if(B < 1) { B = 1; @@ -220,7 +220,7 @@ export async function getBossHp(serverId: number, guildCode: string, dicBossBase B = 1; bossHp = minBossHp; } - saveGuildBossHpLog(serverId, warId, guildCode, { minBossHp, bossHpRatio, ratio, playerAtkAvg, player10Damage, activeCe, playerCnt, B, bossHp }) + saveGuildBossHpLog(serverId, warId, guildCode, { minBossHp, bossHpRatio, ratio, playerAtkAvg, player10Damage, activeCe, activePlayerCnt, playerAtkSum, playerCnt, B, bossHp }) return { ratio: B, bossHp: zoomInDamage(bossHp) }; } @@ -236,9 +236,10 @@ function getB(warId: number, bossLv: number, activeCe: number, playerCnt: number async function getPlayerAtkAvg(myGuild: GuildRecord) { if (!myGuild) return false; - let playerAtkSum = 0, playerCnt = 0, activeCe = 0; + let playerAtkSum = 0, playerCnt = 0, activeCe = 0, activePlayerCnt = 0; if (myGuild) { let activePlayers = myGuild.players || []; + activePlayerCnt = activePlayers.length; activePlayers.sort((a, b) => b.ce - a.ce); for (let i = 0; i < 10; i++) { if (!activePlayers[i]) break; @@ -252,13 +253,13 @@ async function getPlayerAtkAvg(myGuild: GuildRecord) { } if (heroCnt == 0) continue; // 基本不可能,但是以防NaN playerAtkSum += onePlayerAtkSum / heroCnt * 6; - playerCnt++; activeCe += topLineupCe; + playerCnt ++; } } if (playerCnt == 0) return false; - let playerAtkAvg = playerAtkSum / playerCnt * 10; - return { playerAtkAvg, playerCnt, activeCe }; + let playerAtkAvg = playerAtkSum / playerCnt; + return { playerAtkAvg, playerCnt, activeCe, activePlayerCnt, playerAtkSum }; } export async function getBossHpRatioByServer(type: BOSS_HP_RATIO_TYPE, serverId: number) { diff --git a/shared/db/UserLog.ts b/shared/db/UserLog.ts index cdd359d35..574fdfc9c 100644 --- a/shared/db/UserLog.ts +++ b/shared/db/UserLog.ts @@ -30,7 +30,10 @@ export class GateHpLog { cityRatio: number; @prop({ required: false }) gateHp: number; - + @prop({ required: false }) + playerAtkSum: number; + @prop({ required: false }) + playerCnt: number; } export class BossHpLog { @@ -47,6 +50,10 @@ export class BossHpLog { @prop({ required: false }) activeCe: number; @prop({ required: false }) + activePlayerCnt: number; + @prop({ required: false }) + playerAtkSum: number; + @prop({ required: false }) playerCnt: number; @prop({ required: false }) B: number;