军团活动:修改诸侯混战城门血量计算公式

This commit is contained in:
luying
2022-06-10 17:55:15 +08:00
parent dc90eddac0
commit 962932adca
9 changed files with 97 additions and 11 deletions

View File

@@ -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 });

View File

@@ -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 });

View File

@@ -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 });

View File

@@ -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;
}

View File

@@ -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) };
}

View File

@@ -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 {

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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);
}
}