名将擂台:特殊处理已经定时任务处理

This commit is contained in:
luying
2022-07-19 17:14:11 +08:00
parent 05d8449ca3
commit 9a0cdf7204
5 changed files with 21 additions and 18 deletions
@@ -72,7 +72,7 @@ export class LadderHandler {
if(!checkRank(myRank, rank)) return resResult(STATUS.LADDER_RANK_ERROR); if(!checkRank(myRank, rank)) return resResult(STATUS.LADDER_RANK_ERROR);
let { status, isRobot, hisLadderData } = await getLadderOppStatus(ladderData, targetRoleId, myRank, rank); let { status, isRobot, hisLadderData } = await getLadderOppStatus(ladderData, targetRoleId, myRank, rank);
if(status != LADDER_OPP_STATUS.BATTLE) { if(status != LADDER_OPP_STATUS.BATTLE) {
await LadderMatchModel.unlock(targetRoleId); await LadderMatchModel.unlock(serverId, targetRoleId);
let oppPlayers = await refreshLadderEnemies(ladderData); let oppPlayers = await refreshLadderEnemies(ladderData);
return resResult(STATUS.SUCCESS, { return resResult(STATUS.SUCCESS, {
status, oppPlayers status, oppPlayers
@@ -87,7 +87,7 @@ export class LadderHandler {
} }
if(refOppObj.challengeCnt + 1 > LADDER.LADDER_CHALLENGE_FREE_TIMES + refOppObj.buyCnt) { if(refOppObj.challengeCnt + 1 > LADDER.LADDER_CHALLENGE_FREE_TIMES + refOppObj.buyCnt) {
await LadderMatchModel.unlock(targetRoleId); await LadderMatchModel.unlock(serverId, targetRoleId);
return resResult(STATUS.LADDER_CHALLENGE_CNT_MAX); return resResult(STATUS.LADDER_CHALLENGE_CNT_MAX);
} }
update.challengeCnt = refOppObj.challengeCnt + 1; update.challengeCnt = refOppObj.challengeCnt + 1;
@@ -212,7 +212,7 @@ export class LadderHandler {
await BattleRecordModel.updateBattleRecordByCode(battleCode, { $set: { status: isSuccess? 1: 2 } }); await BattleRecordModel.updateBattleRecordByCode(battleCode, { $set: { status: isSuccess? 1: 2 } });
let historyRank = ladderData.historyRank; let historyRank = ladderData.historyRank;
ladderData = await LadderMatchModel.updateByRoleId(roleId, { historyRank: historyRank > atkLadderMatch.rank? atkLadderMatch.rank: historyRank, locked: 0 }); ladderData = await LadderMatchModel.updateByRoleId(roleId, { historyRank: (historyRank > rank || historyRank == 0)? rank: historyRank });
result.setLadderData(ladderData, rec); result.setLadderData(ladderData, rec);
// 获取奖励 // 获取奖励
@@ -375,7 +375,7 @@ export class LadderHandler {
let ladderData = await LadderMatchModel.findByRoleId(roleId); let ladderData = await LadderMatchModel.findByRoleId(roleId);
if(!ladderData) return resResult(STATUS.LADDER_NOT_OPEN); if(!ladderData) return resResult(STATUS.LADDER_NOT_OPEN);
ladderData = await LadderMatchModel.updateByRoleId(roleId, { rank, historyRank: ladderData.historyRank < rank? ladderData.historyRank: rank }); ladderData = await LadderMatchModel.updateByRoleId(roleId, { rank, historyRank: (ladderData.historyRank > rank || ladderData.historyRank == 0)? rank: ladderData.historyRank });
await battleEndWhenChange(ladderData, false); await battleEndWhenChange(ladderData, false);
await LadderMatchModel.updateByRoleId(roleId, { refDaily: new Date(Date.now() - 86400000) }); await LadderMatchModel.updateByRoleId(roleId, { refDaily: new Date(Date.now() - 86400000) });
+4 -4
View File
@@ -212,13 +212,13 @@ export async function getLadderOppStatus(ladderData: LadderMatchType, targetRole
if(curOppPlayer.isRobot) { if(curOppPlayer.isRobot) {
if(rank <= 3000) { if(rank <= 3000) {
let hisLadderData = await LadderMatchRecModel.checkByRank(`robot${rank}`); let hisLadderData = await LadderMatchRecModel.checkByRank(ladderData.serverId, `robot${rank}`);
if(hisLadderData) return { status: LADDER_OPP_STATUS.OPP_RANK_CHANGE }; if(hisLadderData) return { status: LADDER_OPP_STATUS.OPP_RANK_CHANGE };
} }
return { status: LADDER_OPP_STATUS.BATTLE, isRobot: true }; return { status: LADDER_OPP_STATUS.BATTLE, isRobot: true };
} else { } else {
let hisLadderData = await LadderMatchModel.lock(targetRoleId, rank); let hisLadderData = await LadderMatchModel.lock(ladderData.serverId, targetRoleId, rank);
if(!hisLadderData) return { status: LADDER_OPP_STATUS.OPP_IS_LOCKED }; if(!hisLadderData) return { status: LADDER_OPP_STATUS.OPP_IS_LOCKED };
return { status: LADDER_OPP_STATUS.BATTLE, isRobot: false, hisLadderData }; return { status: LADDER_OPP_STATUS.BATTLE, isRobot: false, hisLadderData };
@@ -279,8 +279,8 @@ function calculateDefCeByDefense(defense: LadderDefense) {
export async function ladderTimeout(battleCode: string, status: LADDER_STATUS) { export async function ladderTimeout(battleCode: string, status: LADDER_STATUS) {
let rec = await LadderMatchRecModel.timeout(battleCode); let rec = await LadderMatchRecModel.timeout(battleCode);
console.log('##### rec.defenseInfo', rec.defenseInfo, rec.defenseInfo.isRobot, rec.defenseInfo.roleId) // console.log('##### rec.defenseInfo', rec.defenseInfo, rec.defenseInfo.isRobot, rec.defenseInfo.roleId)
if(rec.defenseInfo && !rec.defenseInfo.isRobot) await LadderMatchModel.unlock(rec.defenseInfo.roleId); if(rec.defenseInfo && !rec.defenseInfo.isRobot) await LadderMatchModel.unlock(rec.serverId, rec.defenseInfo.roleId);
if(status == LADDER_STATUS.CHECK) { if(status == LADDER_STATUS.CHECK) {
await sendMessageToUserWithSuc(rec.roleId1, PUSH_ROUTE.LADDER_CHECK_STOP, { battleCode }); await sendMessageToUserWithSuc(rec.roleId1, PUSH_ROUTE.LADDER_CHECK_STOP, { battleCode });
} else if (status == LADDER_STATUS.BATTLE) { } else if (status == LADDER_STATUS.BATTLE) {
@@ -743,6 +743,9 @@ async function setTakeRankSnapshotSchedule(activityId: number, serverId: number,
// —————————————— 名将擂台 start —————————————— // // —————————————— 名将擂台 start —————————————— //
export async function setLadderCountDown(battleCode: string, time: number, status: LADDER_STATUS) { export async function setLadderCountDown(battleCode: string, time: number, status: LADDER_STATUS) {
if(scheduledJobs[`ladder${battleCode}`]) {
scheduledJobs[`ladder${battleCode}`].cancel();
}
let endTime = time + (status == LADDER_STATUS.CHECK? LADDER.LADDER_BATTLE_PREPARE_COUNTDOWN: LADDER.LADDER_BATTLE_COUNTDOWN) + LADDER_SERVER_GAP_TIME; let endTime = time + (status == LADDER_STATUS.CHECK? LADDER.LADDER_BATTLE_PREPARE_COUNTDOWN: LADDER.LADDER_BATTLE_COUNTDOWN) + LADDER_SERVER_GAP_TIME;
scheduleJob(`ladder${battleCode}`, endTime * 1000, async () => { scheduleJob(`ladder${battleCode}`, endTime * 1000, async () => {
await ladderTimeout(battleCode, status); await ladderTimeout(battleCode, status);
+4 -4
View File
@@ -83,16 +83,16 @@ export default class LadderMatch extends BaseModel {
return result return result
} }
public static async lock(roleId: string, rank: number) { public static async lock(serverId: number, roleId: string, rank: number) {
const defense: LadderMatchType = await LadderMatchModel.findOneAndUpdate({ roleId, rank, locked: 0 }, { $set: { locked: 1 }}, { new: true }) const defense: LadderMatchType = await LadderMatchModel.findOneAndUpdate({ serverId, roleId, rank, locked: 0 }, { $set: { locked: 1 }}, { new: true })
.populate('role', 'roleId roleName head frame spine heads frames spines title lv updatedAt') .populate('role', 'roleId roleName head frame spine heads frames spines title lv updatedAt')
.populate('defense.heroes.hero', 'hid skinId quality star colorStar lv') .populate('defense.heroes.hero', 'hid skinId quality star colorStar lv')
.lean(); .lean();
return defense; return defense;
} }
public static async unlock(roleId: string) { public static async unlock(serverId: number, roleId: string) {
const defense: LadderMatchType = await LadderMatchModel.findOneAndUpdate({ roleId }, { $set: { locked: 0 }}, { new: true }).lean(); const defense: LadderMatchType = await LadderMatchModel.findOneAndUpdate({ serverId, roleId }, { $set: { locked: 0 }}, { new: true }).lean();
return defense; return defense;
} }
+6 -6
View File
@@ -52,7 +52,7 @@ export default class LadderMatchRec extends BaseModel {
} }
public static async timeout(battleCode: string) { public static async timeout(battleCode: string) {
const result: LadderMatchRecType = await LadderMatchRecModel.findOneAndUpdate({ battleCode }, { $set: { status: LADDER_STATUS.COMPLETE, timeout: true } }, { new: true }).lean(); const result: LadderMatchRecType = await LadderMatchRecModel.findOneAndUpdate({ battleCode }, { $set: { status: LADDER_STATUS.COMPLETE, timeout: true, endTime: nowSeconds() } }, { new: true }).lean();
return result; return result;
} }
@@ -74,15 +74,15 @@ export default class LadderMatchRec extends BaseModel {
} }
public static async battleEnd(battleCode: string, isSuccess: boolean, atkNewRank?: number, defNewRank?: number) { public static async battleEnd(battleCode: string, isSuccess: boolean, atkNewRank?: number, defNewRank?: number) {
let update: LadderMatchRecUpdate = { status: LADDER_STATUS.COMPLETE, endTime: nowSeconds() }; let update: LadderMatchRecUpdate = { status: LADDER_STATUS.COMPLETE, endTime: nowSeconds(), timeout: false };
if(isSuccess) { if(isSuccess) {
update['attackInfo.isSuccess'] = true; update['attackInfo.isSuccess'] = true;
update['defenseInfo.isSuccess'] = false; update['defenseInfo.isSuccess'] = false;
} }
if(atkNewRank != undefined && defNewRank != undefined) { if(atkNewRank != undefined && defNewRank != undefined) {
update['attackInfo.rank'] = atkNewRank; update['attackInfo.newRank'] = atkNewRank;
update['attackInfo.oldRank'] = defNewRank; update['attackInfo.oldRank'] = defNewRank;
update['defenseInfo.rank'] = defNewRank; update['defenseInfo.newRank'] = defNewRank;
update['defenseInfo.oldRank'] = atkNewRank; update['defenseInfo.oldRank'] = atkNewRank;
} }
@@ -98,8 +98,8 @@ export default class LadderMatchRec extends BaseModel {
return recs; return recs;
} }
public static async checkByRank(roleId2: string) { public static async checkByRank(serverId: number, roleId2: string) {
const result = await LadderMatchRecModel.exists({ roleId2, status: { $in: [LADDER_STATUS.BATTLE, LADDER_STATUS.CHECK] } }); const result = await LadderMatchRecModel.exists({ serverId, roleId2, status: { $in: [LADDER_STATUS.BATTLE, LADDER_STATUS.CHECK] } });
return result; return result;
} }