diff --git a/game-server/app/servers/battle/handler/ladderHandler.ts b/game-server/app/servers/battle/handler/ladderHandler.ts index 3d32ad124..93ed1b122 100644 --- a/game-server/app/servers/battle/handler/ladderHandler.ts +++ b/game-server/app/servers/battle/handler/ladderHandler.ts @@ -212,7 +212,7 @@ export class LadderHandler { await BattleRecordModel.updateBattleRecordByCode(battleCode, { $set: { status: isSuccess? 1: 2 } }); let historyRank = ladderData.historyRank; - ladderData = await LadderMatchModel.updateByRoleId(roleId, { historyRank: (historyRank > rank || historyRank == 0)? rank: historyRank }); + ladderData = await LadderMatchModel.updateByRoleId(roleId, { historyRank: (historyRank > atkLadderMatch.rank || historyRank == 0)? atkLadderMatch.rank: historyRank }); result.setLadderData(ladderData, rec); // 获取奖励 diff --git a/game-server/app/services/ladderService.ts b/game-server/app/services/ladderService.ts index c1aa86b6c..2f44d6ba7 100644 --- a/game-server/app/services/ladderService.ts +++ b/game-server/app/services/ladderService.ts @@ -267,19 +267,23 @@ function calculateDefCeByDefense(defense: LadderDefense) { return ce; } -export async function ladderTimeout(battleCode: string, status: LADDER_STATUS) { - let rec = await LadderMatchRecModel.findByBattleCode(battleCode); - if(status == LADDER_STATUS.CHECK) { - await sendMessageToUserWithSuc(rec.roleId1, PUSH_ROUTE.LADDER_CHECK_STOP, { battleCode }); - } else if (status == LADDER_STATUS.BATTLE) { +export async function ladderTimeWillout(battleCode: string, status: LADDER_STATUS) { + console.log('######### ladderTimeWillout') + if (status == LADDER_STATUS.BATTLE) { + let rec = await LadderMatchRecModel.findByBattleCode(battleCode); await sendMessageToUserWithSuc(rec.roleId1, PUSH_ROUTE.LADDER_BATTLE_STOP, { battleCode }); } +} - setTimeout(async () => { - let rec = await LadderMatchRecModel.timeout(battleCode); - // console.log('##### rec.defenseInfo', rec.defenseInfo, rec.defenseInfo.isRobot, rec.defenseInfo.roleId) - if(rec.defenseInfo && !rec.defenseInfo.isRobot) await LadderMatchModel.unlock(rec.serverId, rec.defenseInfo.roleId); - }, LADDER_SERVER_GAP_TIME * 1000); +export async function ladderTimeout(battleCode: string, status: LADDER_STATUS) { + console.log('######### ladderTimeout') + let rec = await LadderMatchRecModel.timeout(battleCode); + // console.log('##### rec.defenseInfo', rec.defenseInfo, rec.defenseInfo.isRobot, rec.defenseInfo.roleId) + if(rec.defenseInfo && !rec.defenseInfo.isRobot) await LadderMatchModel.unlock(rec.serverId, rec.defenseInfo.roleId); + + if(status == LADDER_STATUS.CHECK) { + await sendMessageToUserWithSuc(rec.roleId1, PUSH_ROUTE.LADDER_CHECK_STOP, { battleCode }); + } } /** @@ -338,7 +342,7 @@ export function completeLadderRanks(ranks: RoleAndGuildRankInfo[]) { result.push(rank); } else { let rank = new RoleAndGuildRankInfo(i, 0); - rank.setByField(`robot${i}`, LADDER.LADDER_ROBOT_NAME, head, EXTERIOR.EXTERIOR_FACECASE, spine, level, 1, '', ce ); + rank.setByField(`robot${i}`, LADDER.LADDER_ROBOT_NAME, head, EXTERIOR.EXTERIOR_FACECASE, spine, level, 1, '', ce, ce ); result.push(rank); } } diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index ffe760f2d..ee4fcf295 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -39,7 +39,7 @@ import { resResult } from '../pubUtils/util'; import { checkPopUpConditionWhenGuildActivityEnd } from './activity/popUpShopService'; import { pushRefreshTime } from './connectorService'; import { sendUnReceivedActivityDailyCoin } from './activity/dailyCoinService'; -import { ladderTimeout, sendLadderDailyReward } from './ladderService'; +import { ladderTimeout, ladderTimeWillout, sendLadderDailyReward } from './ladderService'; import { clearLadderLock } from './ladderService'; const PER_SECOND = 1 * 1000; @@ -748,7 +748,13 @@ export async function setLadderCountDown(battleCode: string, time: number, statu } let endTime = time + (status == LADDER_STATUS.CHECK? LADDER.LADDER_BATTLE_PREPARE_COUNTDOWN: LADDER.LADDER_BATTLE_COUNTDOWN); scheduleJob(`ladder${battleCode}`, endTime * 1000, async () => { - await ladderTimeout(battleCode, status); + await ladderTimeWillout(battleCode, status); + + scheduledJobs[`ladder${battleCode}`].cancel(); + scheduleJob(`ladder${battleCode}`, endTime * 1000 + LADDER_SERVER_GAP_TIME * 1000, async () => { + await ladderTimeout(battleCode, status); + scheduledJobs[`ladder${battleCode}`].cancel(); + }); }) } diff --git a/shared/domain/rank.ts b/shared/domain/rank.ts index 302fd0ce9..beaab9fb9 100644 --- a/shared/domain/rank.ts +++ b/shared/domain/rank.ts @@ -33,6 +33,9 @@ export class RankParam { @prop({ required: true }) ce: number = 0; + @prop({ required: true }) + topLineupCe: number = 0; + @prop({ required: true }) updatedAt?: number = 0; @@ -45,6 +48,7 @@ export class RankParam { if(role.title) this.title = role.title; if(role.guildName) this.guildName = role.guildName||""; if(role.ce) this.ce = role.ce; + if(role.topLineupCe) this.topLineupCe = role.topLineupCe; if(role.updatedAt) { if(typeof role.updatedAt == 'number') { this.updatedAt = role.updatedAt; @@ -225,7 +229,7 @@ export class RoleAndGuildRankInfo { } setUserInfo(role: RoleRankInfo) { - this.userInfo = pick(role, ['roleId', 'roleName', 'head', 'frame', 'spine', 'lv', 'title', 'guildName', 'ce']); + this.userInfo = pick(role, ['roleId', 'roleName', 'head', 'frame', 'spine', 'lv', 'title', 'guildName', 'ce', 'topLineupCe']); this.lineup = role.lineup; } @@ -244,8 +248,8 @@ export class RoleAndGuildRankInfo { return false; } - setByField(roleId: string, roleName: string, head: number, frame: number, spine: number, lv: number, title: number, guildName: string, ce: number) { - this.userInfo = { roleId, roleName, head, frame, spine, lv, title, guildName, ce } + setByField(roleId: string, roleName: string, head: number, frame: number, spine: number, lv: number, title: number, guildName: string, ce: number, topLineupCe: number) { + this.userInfo = { roleId, roleName, head, frame, spine, lv, title, guildName, ce, topLineupCe } } } @@ -386,7 +390,7 @@ export class GeneralRankParam { this.type = type; if(general == 1) { if(rankInfo instanceof RoleRankInfo) { - this.userInfo = pick(rankInfo, ['roleId', 'roleName', 'head', 'frame', 'spine', 'guildName', 'ce', 'title', 'lv']); + this.userInfo = pick(rankInfo, ['roleId', 'roleName', 'head', 'frame', 'spine', 'guildName', 'ce', 'title', 'lv', 'topLineupCe']); } } this.num = rankInfo.num;