军团活动:粮草先行事件计算

This commit is contained in:
luying
2022-07-05 20:00:57 +08:00
parent 061a63d4ea
commit ba6c77999c
3 changed files with 37 additions and 26 deletions

View File

@@ -133,12 +133,15 @@ export class RaceActivityObject {
this.events.set(toGuild, events);
}
let { guildRank, myGuildRank, myIndex } = await this.getRanks(serverId, toGuild);
console.log('####', myIndex)
if(myGuildRank) {
let woodenHorseList = await this.getScreenHorses(serverId, guildRank, myIndex, true, Date.now() - event.startTime);
for(let woodenHorse of woodenHorseList||[]) {
if(woodenHorse) await sendMessageToGuildWithSuc(woodenHorse.guildCode, PUSH_ROUTE.GUILD_RACE_EVENT, { timestamp: Date.now(), events: [event] });
}
let ranks = this.getScreenHorseRanks(guildRank, myIndex);
for(let rank of ranks||[]) {
if(rank) await sendMessageToGuildWithSuc(rank.code, PUSH_ROUTE.GUILD_RACE_EVENT, { timestamp: Date.now(), events: [event] });
}
let timeout = setTimeout(async () => {
await this.getScreenHorses(serverId, guildRank, myIndex, true);
clearTimeout(timeout);
}, event.startTime - Date.now())
} else {
await sendMessageToGuildWithSuc(toGuild, PUSH_ROUTE.GUILD_RACE_EVENT, { timestamp: Date.now(), events: [event] });
}
@@ -279,42 +282,50 @@ export class RaceActivityObject {
}
private async getScreenHorses(serverId: number, ranks: RaceActivityRankParam[], i: number, needSend: boolean, time = 0) {
private getScreenHorseRanks(ranks: RaceActivityRankParam[], i: number) {
let curRank = ranks[i];
if(curRank.durability == 0) return;
if(!curRank || curRank.durability == 0) return;
let beforeHorses: WoodenHorse[] = [], afterHorses: WoodenHorse[] = [], beforeCnt = 0, afterCnt = 0;
let beforeHorses: RaceActivityRankParam[] = [], afterHorses: RaceActivityRankParam[] = [], beforeCnt = 0, afterCnt = 0;
for(let j = i - 1; j >= 0; j--) {
if(ranks[j]) {
let wh = await this.getWoodenHorse(ranks[j].code, serverId);
if(wh) {
beforeHorses.push(wh);
if(ranks[j].durability > 0) beforeCnt ++
}
beforeHorses.push(ranks[j]);
if(ranks[j].durability > 0) beforeCnt ++
}
if(beforeCnt >= 2) break;
}
for(let j = i + 1; j < ranks.length; j++) {
if(ranks[j]) {
let wh = await this.getWoodenHorse(ranks[j].code, serverId);
if(wh) {
afterHorses.push(wh);
if(ranks[j].durability > 0) afterCnt++;
}
afterHorses.push(ranks[j]);
if(ranks[j].durability > 0) afterCnt++;
}
if(afterCnt >= 2) break;
}
// 发送
// console.log('send', woodenHorseList.length);
return [...beforeHorses.reverse(), curRank, ...afterHorses]
}
private async getScreenHorses(serverId: number, ranks: RaceActivityRankParam[], i: number, needSend: boolean) {
let curRank = ranks[i];
if(curRank.durability == 0) return;
// 发送
// console.log('send', woodenHorseList.length);
let wh = await this.getWoodenHorse(curRank.code, serverId);
let woodenHorseList = wh? [...beforeHorses.reverse(), wh, ...afterHorses]: [...beforeHorses.reverse(), ...afterHorses];
let screenRank = this.getScreenHorseRanks(ranks, i);
let woodenHorseList: WoodenHorse[] = [];
for(let rank of screenRank) {
if(rank.code == curRank.code) {
woodenHorseList.push(wh);
} else {
let wh = await this.getWoodenHorse(rank.code, serverId);
woodenHorseList.push(wh);
}
}
if(needSend) {
let timeout = setTimeout(async () => {
let events = this.getEvents(curRank.code, wh ? wh.distance : 0);
await sendMessageToGuildWithSuc(curRank.code, PUSH_ROUTE.GUILD_RACE_UPDATE, { timestamp: Date.now(), woodenHorseList, guildRank: ranks, myGuildRank: curRank, events });
clearTimeout(timeout);
}, time);
let events = this.getEvents(curRank.code, wh ? wh.distance : 0);
await sendMessageToGuildWithSuc(curRank.code, PUSH_ROUTE.GUILD_RACE_UPDATE, { timestamp: Date.now(), woodenHorseList, guildRank: ranks, myGuildRank: curRank, events });
}
return woodenHorseList
}