diff --git a/game-server/app/servers/guild/handler/cityActivityHandler.ts b/game-server/app/servers/guild/handler/cityActivityHandler.ts index f0a883554..5855705c8 100644 --- a/game-server/app/servers/guild/handler/cityActivityHandler.ts +++ b/game-server/app/servers/guild/handler/cityActivityHandler.ts @@ -186,7 +186,7 @@ export class CityActivityHandler { const dbCities = await GuildActivityCityModel.getAllCities(serverId); let cityStatus = pubGetCityStatus(guildCode, cityId, dicCity, dbCities); // 全服活跃统计 - await ServerRecordModel.addActiveGuild(serverId, guildCode); + await ServerRecordModel.addActiveGuild(serverId, roleId, guildCode); // 任务 await checkTask(serverId, roleId, sid, TASK_TYPE.GUILD_ACTIVITY, { aid: this.aid }); diff --git a/game-server/app/servers/guild/handler/gateActivityHandler.ts b/game-server/app/servers/guild/handler/gateActivityHandler.ts index 696425211..f60646604 100644 --- a/game-server/app/servers/guild/handler/gateActivityHandler.ts +++ b/game-server/app/servers/guild/handler/gateActivityHandler.ts @@ -92,7 +92,7 @@ export class GateActivityHandler { let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId }, true); let guildScore = await r.getMyScore({ guildCode }); // 全服活跃统计 - await ServerRecordModel.addActiveGuild(serverId, guildCode); + await ServerRecordModel.addActiveGuild(serverId, roleId, guildCode); // 任务 await checkTask(serverId, roleId, sid, TASK_TYPE.GUILD_ACTIVITY, { aid: this.aid }); diff --git a/game-server/app/servers/guild/handler/raceActivityHandler.ts b/game-server/app/servers/guild/handler/raceActivityHandler.ts index 5e72734fa..c4ea56576 100644 --- a/game-server/app/servers/guild/handler/raceActivityHandler.ts +++ b/game-server/app/servers/guild/handler/raceActivityHandler.ts @@ -106,7 +106,7 @@ export class RaceActivityHandler { await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.GUILD_RACE_JOIN, { timestamp: Date.now(), woodenHorse }); // 全服活跃统计 - await ServerRecordModel.addActiveGuild(serverId, guildCode); + await ServerRecordModel.addActiveGuild(serverId, roleId, guildCode); // 任务 await checkTask(serverId, roleId, sid, TASK_TYPE.GUILD_ACTIVITY, { aid: this.aid }); diff --git a/game-server/app/services/guildActivity/guildActivityService.ts b/game-server/app/services/guildActivity/guildActivityService.ts index fad86b937..4e60c5a1b 100644 --- a/game-server/app/services/guildActivity/guildActivityService.ts +++ b/game-server/app/services/guildActivity/guildActivityService.ts @@ -26,6 +26,7 @@ import { ActivePlayer, GuildRecord, ServerRecordModel } from "../../db/ServerRec import { Attack } from "../../domain/battleField/pvp"; import { getHonourObject } from "../role/rewardService"; import { sendMessageToCityWithSuc, sendMessageToGuildWithSuc, sendMessageToServerWithSuc } from "../pushService"; +import { saveGuildGateHpLog } from "../../pubUtils/logUtil"; let gateActivityObj: GateActivityObject; let cityActivityObj: CityActivityObject; @@ -780,12 +781,15 @@ export async function getCityActivityGateHp(serverId: number, cityId: number) { let serverRecord = await ServerRecordModel.findTodayData(serverId); if(!serverRecord) return dicCityActivity.hp; - let activePlayerCnt = 1, activePlayerCe = 0, activeTopPlayerCnt = 1, activeGuildCnt = 1; + let activePlayerCnt = 50; // 前一天参与军团活动的玩家 + let activeGuildCnt = 5; // 前一天参与军团活动的军团 + let activePlayerCe = 0; // 前一天前十玩家的最强战力和 + let activeTopPlayerCnt = 1; // 前一天最强玩家数量 if(serverRecord) { - if(serverRecord.activePlayerCnt > 0) activePlayerCnt = serverRecord.activePlayerCnt; if(serverRecord.activePlayerCe > 0) activePlayerCe = serverRecord.activePlayerCe; if(serverRecord.activePlayers?.length > 0) activeTopPlayerCnt = serverRecord.activePlayers?.length; if(serverRecord.activeGuildCodes?.length > 0) activeGuildCnt = serverRecord.activeGuildCodes?.length; + if(serverRecord.activeGuildMembers?.length > 0) activePlayerCnt = serverRecord.activeGuildMembers?.length; } console.log(`getCityActivityGateHp: activePlayerCnt ${activePlayerCnt}, activePlayerCe ${activePlayerCe}, activeTopPlayerCnt ${activeTopPlayerCnt} activeGuildCnt ${activeGuildCnt}`); @@ -803,6 +807,9 @@ export async function getCityActivityGateHp(serverId: number, cityId: number) { let gateHp = Math.floor(gateHpBase * (activePlayerCnt/activeGuildCnt) * N); console.log(`getCityActivityGateHp: gateHp ${gateHp}`); + + saveGuildGateHpLog(serverId, cityId, { activePlayerCnt, activePlayerCe, activeTopPlayerCnt, activeGuildCnt, atk, A, hpBase: gateHpBase, N, gateHp }); + if(gateHp <= dicCityActivity.hp) { gateHp = dicCityActivity.hp; } diff --git a/game-server/app/services/guildBossService.ts b/game-server/app/services/guildBossService.ts index 5947ae875..98b32b108 100644 --- a/game-server/app/services/guildBossService.ts +++ b/game-server/app/services/guildBossService.ts @@ -18,6 +18,7 @@ import { GUILDACTIVITY } from '../pubUtils/dicParam'; import { ServerRecordModel } from '../db/ServerRecords'; import { sendMessageToGuildWithSuc, sendMessageToUsersWithSuc } from './pushService'; import { AttributeCal } from '../domain/roleField/attribute'; +import { saveGuildBossHpLog } from '../pubUtils/logUtil'; /** * 获得boss界面 @@ -231,6 +232,7 @@ export async function getBossHp(serverId: number, guildCode: string, dicBossBase bossHp = minBossHp; } console.log(`getBossHp B ${B}`); + saveGuildBossHpLog(serverId, warId, guildCode, { minBossHp, bossHpRatio, hp, activeCe, playerCnt, subCe, B, bossHp }) return { ratio: B, bossHp: zoomInDamage(bossHp) }; } diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index b208f7656..3769a2dae 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -1092,6 +1092,8 @@ export enum LOG_TYPE { PAY = 'pay', // 充值 ITEM_CHANGE = 'itemChange', // 道具变动 RECEIVE_MAIL = 'receiveMail', // 领取邮件 + GATE_HP = 'gateHp', // 诸侯混战城门 + BOSS_HP = 'bossHp', // 演武台boss血量 } export enum CE_CHANGE_REASON { diff --git a/shared/db/ServerRecords.ts b/shared/db/ServerRecords.ts index c62ebe287..8d60e3c6f 100644 --- a/shared/db/ServerRecords.ts +++ b/shared/db/ServerRecords.ts @@ -53,6 +53,9 @@ export default class ServerRecord extends BaseModel { @prop({ required: true, type: String, default: [] }) activeGuildCodes: string[]; // 前一天参与军团活动的军团 + @prop({ required: true, type: String, default: [] }) + activeGuildMembers: string[]; // 前一天参与军团活动的玩家 + @prop({ required: true, type: GuildRecord, _id: false }) activeGuilds: GuildRecord[]; @@ -62,9 +65,9 @@ export default class ServerRecord extends BaseModel { return rec; } - public static async addActiveGuild(serverId: number, guildCode: string) { + public static async addActiveGuild(serverId: number, roleId: string, guildCode: string) { let tomorrow = getZeroPoint() + 86400; - let rec: ServerRecordType = await ServerRecordModel.findOneAndUpdate({ serverId, today: tomorrow }, { $addToSet: { activeGuildCodes: guildCode } }, { new: true, upsert: true }).lean(); + let rec: ServerRecordType = await ServerRecordModel.findOneAndUpdate({ serverId, today: tomorrow }, { $addToSet: { activeGuildCodes: guildCode, activeGuildMembers: roleId } }, { new: true, upsert: true }).lean(); return rec; } diff --git a/shared/db/UserLog.ts b/shared/db/UserLog.ts index 5bcd9050d..fbc3cdc2b 100644 --- a/shared/db/UserLog.ts +++ b/shared/db/UserLog.ts @@ -9,6 +9,46 @@ class MalReward { count: number; } +export class GateHpLog { + @prop({ required: false }) + activePlayerCnt: number; + @prop({ required: false }) + activePlayerCe: number; + @prop({ required: false }) + activeTopPlayerCnt: number; + @prop({ required: false }) + activeGuildCnt: number; + @prop({ required: false }) + atk: number; + @prop({ required: false }) + A: number; + @prop({ required: false }) + hpBase: number; + @prop({ required: false }) + N: number; + @prop({ required: false }) + gateHp: number; +} + +export class BossHpLog { + @prop({ required: false }) + minBossHp: number; + @prop({ required: false }) + bossHpRatio: number; + @prop({ required: false }) + hp: number; + @prop({ required: false }) + activeCe: number; + @prop({ required: false }) + playerCnt: number; + @prop({ required: false }) + subCe: number; + @prop({ required: false }) + B: number; + @prop({ required: false }) + bossHp: number; +} + /** * 玩家充值订单 */ @@ -19,16 +59,16 @@ export default class UserLog extends BaseModel { @prop({ required: true }) type: string; // 类型 LOG_TYPE - @prop({ required: true }) + @prop({ required: false }) uid: number; // uid @prop({ required: true }) serverId: number; // 小区id - @prop({ required: true }) + @prop({ required: false }) roleId: string; // 角色id - @prop({ required: true }) + @prop({ required: false }) roleName: string; // 角色名 @prop({ required: false }) @@ -101,6 +141,22 @@ export default class UserLog extends BaseModel { @prop({ required: false }) mailSendName: string; // 邮件发件人 + // 诸侯混战城门血条记录 + @prop({ required: false }) + cityId: number; // 城id + + @prop({ required: false, type: GateHpLog, _id: false }) + gateHp: GateHpLog; // 诸侯混战血量参数 + + // 军团boss血量记录 + @prop({ required: false }) + guildCode: string; // 军团code + + @prop({ required: false }) + warId: number; // 城id + + @prop({ required: false, type: BossHpLog, _id: false }) + bossHp: BossHpLog; // 诸侯混战血量参数 public static async createRecord(params: UserLogModelTypeParam) { const r = await UserLogModel.insertMany(params); diff --git a/shared/pubUtils/logUtil.ts b/shared/pubUtils/logUtil.ts index 68f783cbb..852197d8a 100644 --- a/shared/pubUtils/logUtil.ts +++ b/shared/pubUtils/logUtil.ts @@ -1,6 +1,6 @@ import { ACTIVITY_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, HERO_SYSTEM_TYPE, LOG_TYPE } from "../consts"; import { RoleModel, RoleType, RoleUpdate } from "../db/Role"; -import { UserLogModel } from "../db/UserLog"; +import { UserLogModel, GateHpLog, BossHpLog } from "../db/UserLog"; import { UserOrderModelType } from "../db/UserOrder"; import { Figure } from "../domain/dbGeneral"; import { MailParam } from "../domain/roleField/mail"; @@ -109,4 +109,20 @@ export async function saveMailLog(session: any, mails: MailParam[]) { } catch (e) { console.error(e); } +} + +export async function saveGuildGateHpLog(serverId: number, cityId: number, log: GateHpLog) { + try { + await UserLogModel.createRecord({ type: LOG_TYPE.GATE_HP, serverId, cityId, gateHp: log }); + } catch (e) { + console.error(e); + } +} + +export async function saveGuildBossHpLog(serverId: number, warId: number, guildCode: string, log: BossHpLog) { + try { + await UserLogModel.createRecord({ type: LOG_TYPE.BOSS_HP, serverId, warId, guildCode, bossHp: log }); + } catch (e) { + console.error(e); + } } \ No newline at end of file