军团活动:修复活动结束之后还继续挑战的bug
This commit is contained in:
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
|
||||
// 更新数据库
|
||||
|
||||
@@ -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}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送粮草先行活动开始通知
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
* 结算粮草先行奖励
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user