🐞 fix(gvg): 千机阁取消解锁的时候后置节点也要取消
This commit is contained in:
@@ -410,9 +410,6 @@ export class GVGHandler {
|
|||||||
let { configId, period } = getGVGPeriodData();
|
let { configId, period } = getGVGPeriodData();
|
||||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||||
|
|
||||||
const dicTech = gameData.gvgTech.get(techId);
|
|
||||||
if(!dicTech) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
|
||||||
|
|
||||||
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||||
|
|
||||||
@@ -420,18 +417,37 @@ export class GVGHandler {
|
|||||||
const checkAuth = await checkLeagueAuth(roleId, myLeague, LEAGUE_MANAGE_TYPE.UNLOCK_TECH);
|
const checkAuth = await checkLeagueAuth(roleId, myLeague, LEAGUE_MANAGE_TYPE.UNLOCK_TECH);
|
||||||
if(!checkAuth) return resResult(STATUS.GVG_HAS_NO_AUTH);
|
if(!checkAuth) return resResult(STATUS.GVG_HAS_NO_AUTH);
|
||||||
|
|
||||||
|
let dicTech = gameData.gvgTech.get(techId);
|
||||||
|
if(!dicTech) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
// 并发锁
|
// 并发锁
|
||||||
let res: any = await lockLeagueData(DATA_NAME.LEAGUE_TECH, myLeague.leagueCode);//加锁
|
let res: any = await lockLeagueData(DATA_NAME.LEAGUE_TECH, myLeague.leagueCode);//加锁
|
||||||
if (!!res.err) return resResult(STATUS.REDLOCK_ERR);
|
if (!!res.err) return resResult(STATUS.REDLOCK_ERR);
|
||||||
|
|
||||||
let leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, myLeague.leagueCode);
|
let leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, myLeague.leagueCode);
|
||||||
|
|
||||||
if(!checkTechProgress(techId, leaguePrepare?.techQueue||[])) {
|
let techIds: number[] = [], preTechId = techId;
|
||||||
res.releaseCallback();
|
// 如果有后置节点,那么后置节点也需要解锁
|
||||||
return resResult(STATUS.GVG_TECH_HAS_PROGRESS);
|
for(let { id, progress } of (leaguePrepare?.techQueue||[]) ) {
|
||||||
|
if(id == techId) {
|
||||||
|
if(progress > 0) {
|
||||||
|
res.releaseCallback();
|
||||||
|
return resResult(STATUS.GVG_TECH_HAS_PROGRESS);
|
||||||
|
}
|
||||||
|
techIds.push(id)
|
||||||
|
} else {
|
||||||
|
let dicCurTech = gameData.gvgTech.get(id);
|
||||||
|
if(dicCurTech.prepositionId.find(arr => arr.indexOf(preTechId) != -1)) {
|
||||||
|
if(progress > 0) {
|
||||||
|
res.releaseCallback();
|
||||||
|
return resResult(STATUS.GVG_TECH_HAS_PROGRESS);
|
||||||
|
}
|
||||||
|
techIds.push(id);
|
||||||
|
preTechId = id;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
leaguePrepare = await GVGLeaguePrepareModel.rollbackTech(configId, myLeague.leagueCode, techId);
|
leaguePrepare = await GVGLeaguePrepareModel.rollbackTech(configId, myLeague.leagueCode, techIds);
|
||||||
if(!leaguePrepare) {
|
if(!leaguePrepare) {
|
||||||
res.releaseCallback();
|
res.releaseCallback();
|
||||||
return resResult(STATUS.GVG_TECH_QUEUECNT_MAX);
|
return resResult(STATUS.GVG_TECH_QUEUECNT_MAX);
|
||||||
@@ -440,7 +456,7 @@ export class GVGHandler {
|
|||||||
res.releaseCallback();
|
res.releaseCallback();
|
||||||
|
|
||||||
// 推送千机阁解锁消息
|
// 推送千机阁解锁消息
|
||||||
await pushTechRollback(myLeague.guildCodes, techId);
|
await pushTechRollback(myLeague.guildCodes, techIds);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, {
|
return resResult(STATUS.SUCCESS, {
|
||||||
queue: leaguePrepare?.techQueue||[]
|
queue: leaguePrepare?.techQueue||[]
|
||||||
|
|||||||
@@ -484,10 +484,10 @@ export async function pushTechChange(guildCodes: string[], isActive: boolean, id
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function pushTechRollback(guildCodes: string[], id: number) {
|
export async function pushTechRollback(guildCodes: string[], ids: number[]) {
|
||||||
for(let guildCode of guildCodes) {
|
for(let guildCode of guildCodes) {
|
||||||
await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.LEAGUE_TECH_ROLLBACK, {
|
await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.LEAGUE_TECH_ROLLBACK, {
|
||||||
id
|
ids
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,8 +124,8 @@ export default class GVGLeaguePrepare extends BaseModel {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async rollbackTech(configId: number, leagueCode: string, techId: number) {
|
public static async rollbackTech(configId: number, leagueCode: string, techIds: number[]) {
|
||||||
const result: GVGLeaguePrepareType = await GVGLeaguePrepareModel.findOneAndUpdate({ configId, leagueCode }, { $pull: { techQueue: { id: techId } }, $inc: { techQueueCnt: -1 } }, { new: true }).lean();
|
const result: GVGLeaguePrepareType = await GVGLeaguePrepareModel.findOneAndUpdate({ configId, leagueCode }, { $pull: { techQueue: { id: { $in: techIds } } }, $inc: { techQueueCnt: -techIds.length } }, { new: true }).lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user