军团活动:修复活动结束之后还继续挑战的bug

This commit is contained in:
luying
2022-05-27 12:04:46 +08:00
parent d6c6819723
commit fe711307d6
8 changed files with 64 additions and 8 deletions

View File

@@ -1,5 +1,5 @@
import { Application, ChannelService, BackendSession, pinus, HandlerService, } from "pinus";
import { GUILD_ACTIVITY_TYPE, STATUS, REDIS_KEY, GUILD_POINT_WAYS, CITY_STATUS, TASK_TYPE, ITEM_CHANGE_REASON, PUSH_ROUTE } from "../../../consts";
import { GUILD_ACTIVITY_TYPE, STATUS, REDIS_KEY, GUILD_POINT_WAYS, CITY_STATUS, TASK_TYPE, ITEM_CHANGE_REASON, PUSH_ROUTE, GUILD_ACTIVITY_STATUS } from "../../../consts";
import { resResult } from "../../../pubUtils/util";
import { getGuildActivityStatus, getCityActivityObj, getCityStatus as pubGetCityStatus, getCities, getCityActivityRank, sendSingleCityActEndMsg, getPreDayActiveData, sendGuildCityDeclare } from "../../../services/guildActivity/guildActivityService";
import { GuildActivityCityModel } from "../../../db/GuildActivityCity";
@@ -247,7 +247,6 @@ export class CityActivityHandler {
let { cityId, code, damage, hid, round } = msg;
if (damage == undefined || damage < 0) return resResult(STATUS.WRONG_PARMS);
const dicCity = gameData.cityActivity.get(cityId);
let obj = getCityActivityObj();
let { gateHp, maxHp } = await obj.getGateHpAndInc(serverId, cityId);
if (gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO);
@@ -255,6 +254,12 @@ export class CityActivityHandler {
let statusResult = getGuildActivityStatus(this.aid);
if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND);
if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
if(statusResult.status != GUILD_ACTIVITY_STATUS.START) {
return resResult(STATUS.SUCCESS, {
code,
...statusResult
})
}
let pushResult = await UserGuildActivityRecModel.pushCityRecord(code, { round, hid, damage });
if (!pushResult) return resResult(STATUS.WRONG_PARMS);
@@ -262,11 +267,11 @@ export class CityActivityHandler {
let tomorrow = <number>getTimeFun().getAfterDayWithHour();
// 更新redis数据
let myR = new Rank(REDIS_KEY.USER_CITY_ACTIVITY, { serverId, guildCode }, true);
let myScore = await myR.setRankWithRoleInfo(roleId, damage, Date.now(), null, true);
let myScore = await myR.setRankWithRoleInfo(roleId, damage, obj.getTimeGap(), null, true);
await myR.setExpire(tomorrow);
let r = new Rank(REDIS_KEY.CITY_ACTIVITY, { serverId, cityId }, true);
let guildScore = await r.setRankWithGuildInfo(guildCode, damage, Date.now(), null, true);
let guildScore = await r.setRankWithGuildInfo(guildCode, damage, obj.getTimeGap(), null, true);
await r.setExpire(tomorrow);
({gateHp, maxHp} = await obj.getGateHpAndInc(serverId, cityId, -1 * damage));

View File

@@ -131,11 +131,11 @@ export class GateActivityHandler {
let tomorrow = <number>getTimeFun().getAfterDayWithHour();
// 更新redis数据
let myR = new Rank(REDIS_KEY.USER_GATE_ACTIVITY, { serverId, guildCode }, true);
let myScore = await myR.setRankWithRoleInfo(roleId, score, Date.now(), null, true);
let myScore = await myR.setRankWithRoleInfo(roleId, score, obj.getTimeGap(), null, true);
await myR.setExpire(tomorrow);
let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId }, true);
let guildScore = await r.setRankWithGuildInfo(guildCode, score, Date.now(), null, true);
let guildScore = await r.setRankWithGuildInfo(guildCode, score, obj.getTimeGap(), null, true);
await r.setExpire(tomorrow);
// 更新数据库

View File

@@ -1,9 +1,10 @@
import { Application, ChannelService, HandlerService, } from 'pinus';
import { sendAllGuildRanks, calWoodenHorseAndSend, sendRaceStartMsg, setDicGuildActivity, setDicAuctionTime, settleGuildActivityReward } from '../../../services/guildActivity/guildActivityService';
import { sendAllGuildRanks, calWoodenHorseAndSend, sendRaceStartMsg, setDicGuildActivity, setDicAuctionTime, settleGuildActivityReward, gateActivityStart, cityActivityStart } from '../../../services/guildActivity/guildActivityService';
import { gameData } from '../../../pubUtils/data';
import { setWeek } from '../../../pubUtils/timeUtil';
import { sendUngotDividend } from '../../../services/auctionService';
import { errlogger } from '../../../util/logger';
import { GUILD_ACTIVITY_TYPE } from '../../../consts';
export default function (app: Application) {
new HandlerService(app, {});
@@ -57,6 +58,21 @@ export class GuildActivityRemote {
}
}
/**
* 诸侯混战和蛮夷入侵开始
*/
async gateAndCityActivityStart(aid: number) {
try {
if(aid == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) {
await gateActivityStart();
} else if (aid == GUILD_ACTIVITY_TYPE.CITY_ACTIVITY) {
await cityActivityStart();
}
} catch(e) {
errlogger.error(`remote ${__filename} \n ${e.stack}`);
}
}
/**
* 发送粮草先行活动开始通知
*/

View File

@@ -12,6 +12,7 @@ export class CityActivityObject {
private guilds: Map<string, number> = new Map(); // 军团所在的城池 guildCode => cityId
private historyCity: Map<string, number> = new Map(); // 获取自己打开过的城池的页面 roleId => cityId
private sentCity: string[] = [];
private startTime: number = 0;
private getKey(serverId: number, cityId: number) {
return `${serverId}_${cityId}`;
@@ -36,6 +37,14 @@ export class CityActivityObject {
}
}
public startActivity() {
this.startTime = Date.now();
}
public getTimeGap() {
return Date.now() - this.startTime;
}
public hasSent(serverId: number, cityId: number) {
let key = this.getKey(serverId, cityId);
return this.sentCity.indexOf(key) != -1;

View File

@@ -2,9 +2,9 @@
// 军团活动蛮夷入侵城门血量等数据存储
import { Member, GateMembersRec } from "../../domain/battleField/guildActivity";
import { GUILDACTIVITY } from "../../pubUtils/dicParam";
export class GateActivityObject {
public startTime: number;
private members: Map<string, Array<Member>> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}]
private membersRecord: Map<string, GateMembersRec> = new Map(); // 每个成员的回合数和敌军数,防刷 recCode => GateMembersRec
private guilds: Map<number, string[]> = new Map(); // 参加的所有军团 server => [guildCode]
@@ -18,6 +18,14 @@ export class GateActivityObject {
}
}
public startActivity() {
this.startTime = Date.now();
}
public getTimeGap() {
return Date.now() - this.startTime;
}
public getGuilds() {
return this.guilds;
}

View File

@@ -660,6 +660,15 @@ export async function sendRaceStartMsg(serverId: number) {
await calWoodenHorseAndSend(serverId);
}
export async function cityActivityStart() {
let obj = getCityActivityObj();
obj.startActivity();
}
export async function gateActivityStart() {
let obj = getGateActivityObj();
obj.startActivity();
}
/**
* 结算粮草先行奖励

View File

@@ -67,6 +67,13 @@ export class Rank {
new ValueConfig(false, 'durability', 3, false, false),
];
break;
case REDIS_KEY.GATE_ACTIVITY:
case REDIS_KEY.CITY_ACTIVITY:
this.valueConfig = [
new ValueConfig(true, 'score', 0, false, false),
new ValueConfig(false, 'time', 4, true, false),
];
break;
case REDIS_KEY.GUILD_LV_RANK:
this.valueConfig = [
new ValueConfig(true, 'lv', 0, false, false),

View File

@@ -257,10 +257,12 @@ export async function guildActivityStart(dicGuildActivity?: DicGuildActivity) {
guildActEndJobId = undefined;
}
if (dicGuildActivity.id == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) {
await pinus.app.rpc.guild.guildActivityRemote.gateAndCityActivityStart.broadcast(dicGuildActivity.id);
guildActSecondsJobId = scheduleJob('guildActivitySeconds', '*/10 * * * * *', gateActivitySeconds);
// 结束时间
guildActEndJobId = scheduleJob('guildActivityEnd', Date.now() + dicGuildActivity.duringTime * 1000, gateActivityEnd);
} else if (dicGuildActivity.id == GUILD_ACTIVITY_TYPE.CITY_ACTIVITY) {
await pinus.app.rpc.guild.guildActivityRemote.gateAndCityActivityStart.broadcast(dicGuildActivity.id);
guildActSecondsJobId = scheduleJob('guildActivitySeconds', '*/10 * * * * *', cityActivitySeconds);
// 结束时间
guildActEndJobId = scheduleJob('guildActivityEnd', Date.now() + dicGuildActivity.duringTime * 1000, cityActivityEnd);