名将擂台:修复匹配问题

This commit is contained in:
luying
2022-07-19 17:14:11 +08:00
parent 9a0cdf7204
commit a0742336fa
5 changed files with 52 additions and 39 deletions
+30 -22
View File
@@ -1,4 +1,4 @@
import { ITEM_CHANGE_REASON, LADDER_OPP_STATUS, LADDER_STATUS, MAIL_TYPE, PUSH_ROUTE, REDIS_KEY } from "../consts";
import { ITEM_CHANGE_REASON, LADDER_OPP_STATUS, LADDER_SERVER_GAP_TIME, LADDER_STATUS, MAIL_TYPE, PUSH_ROUTE, REDIS_KEY } from "../consts";
import { HeroType } from "../db/Hero";
import { LadderMatchModel, LadderMatchType, LadderUpdateInter } from "../db/LadderMatch";
import { LadderMatchRecModel, LadderMatchRecType } from "../db/LadderMatchRec";
@@ -160,12 +160,14 @@ export function getNumberArr(from: number, to: number) {
return arr;
}
function randomRank(isBefore: boolean, myRank: number, range: number, num: number, gapMin: number, gapMax: number) {
let ratio = isBefore? -1: 1;
function randomRank(isBefore: boolean, myRank: number, range: number, len: number, gapMin: number, gapMax: number) {
if(gapMin > range) gapMin = range;
if(gapMax < range) gapMax = range;
let arr: number[] = [], result = myRank;
while(arr.length < num) {
let minMax = [ result + ratio * gapMin, result + ratio * gapMax ].sort((a, b) => a - b);
let num = getRandValueByMinMax(minMax[0], minMax[1], 0);
while(arr.length < len) {
let min = isBefore? result - gapMax: result + gapMin;
let max = isBefore? result - gapMin: result + gapMax;
let num = getRandValueByMinMax(min, max, 0); // [min, max)
if(isOver(isBefore, myRank, range, num)) break;
result = num;
arr.push(result);
@@ -176,10 +178,10 @@ function randomRank(isBefore: boolean, myRank: number, range: number, num: numbe
// 超出匹配范围
function isOver(isBefore: boolean, myRank: number, range: number, result: number) {
if(isBefore) {
console.log('before', myRank - range < result)
// console.log('before', result, myRank, range, myRank - range, result < myRank - range)
return result < myRank - range;
} else {
console.log('after', myRank + range > result)
// console.log('after', result, myRank, range, myRank + range, result > myRank + range)
return result > myRank + range;
}
}
@@ -191,14 +193,14 @@ export function checkRank(myRank: number, targetRank: number) {
return false
}
if(myRank == targetRank) return false;
if(myRank < targetRank) { // 向后打
if(myRank + dicLadderMatch.rangeAfterMax < targetRank) return false;
} else { // 向前打
if(myRank - dicLadderMatch.rangeBeforeMax > targetRank) return false;
}
if(targetRank <= 10 && !dicLadderMatch.topChallenge) {
return false
if(targetRank <= 10) {
return dicLadderMatch.topChallenge == 1;
} else {
if(myRank < targetRank) { // 向后打
if(myRank + dicLadderMatch.rangeAfterMax < targetRank) return false;
} else { // 向前打
if(myRank - dicLadderMatch.rangeBeforeMax > targetRank) return false;
}
}
return true;
@@ -278,14 +280,18 @@ function calculateDefCeByDefense(defense: LadderDefense) {
}
export async function ladderTimeout(battleCode: string, status: LADDER_STATUS) {
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);
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) {
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);
}
/**
@@ -330,7 +336,7 @@ export async function ladderBattleEndReward(roleId: string, roleName: string, si
let dicLadderDifficultRatio = gameData.ladderDifficultRatio.get(i);
breakRewards.push(...(dicLadderDifficultRatio?.onceReward||[]));
}
let breakGoods = breakRewards.length > 0? await addItems(roleId, roleName, sid, dicLadderDifficultRatio?.onceReward||[], ITEM_CHANGE_REASON.LADDER_BATTLE_REWARD): [];
let breakGoods = breakRewards.length > 0? await addItems(roleId, roleName, sid, combineItems(breakRewards), ITEM_CHANGE_REASON.LADDER_BATTLE_REWARD): [];
return { battleGoods, breakGoods };
}
@@ -381,6 +387,8 @@ export async function getLadderOppDetailData(rec: LadderMatchRecType) {
}
export async function clearLadderLock() {
await LadderMatchModel.clearLock();
await LadderMatchRecModel.clearLock();
let recs = await LadderMatchRecModel.clearLock();
for(let { serverId, defenseInfo } of recs) {
await LadderMatchModel.unlock(serverId, defenseInfo?.roleId);
}
}