名将擂台:特殊处理已经定时任务处理
This commit is contained in:
@@ -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) });
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user