diff --git a/game-server/app/servers/guild/handler/raceActivityHandler.ts b/game-server/app/servers/guild/handler/raceActivityHandler.ts index 5f9d28c70..607d6b968 100644 --- a/game-server/app/servers/guild/handler/raceActivityHandler.ts +++ b/game-server/app/servers/guild/handler/raceActivityHandler.ts @@ -9,6 +9,7 @@ import { addActive } from "../../../services/guildService"; import { Rank } from "../../../services/rankService"; import { checkActivityTask, checkTask } from "../../../services/taskService"; import { guildInter } from "../../../pubUtils/interface"; +import { RaceActivityObject } from "../../../services/guildActivityObjService"; export default function (app: Application) { new HandlerService(app, {}); diff --git a/game-server/app/servers/guild/remote/guildActivityRemote.ts b/game-server/app/servers/guild/remote/guildActivityRemote.ts index c154873ce..02d453790 100644 --- a/game-server/app/servers/guild/remote/guildActivityRemote.ts +++ b/game-server/app/servers/guild/remote/guildActivityRemote.ts @@ -2,7 +2,6 @@ import { Application, ChannelService, HandlerService, } from 'pinus'; import { sendAllGuildRanks, sendGuildActEndMsg, calWoodenHorseAndSend, sendRaceStartMsg } from '../../../services/guildActivityService'; import { gameData } from '../../../pubUtils/data'; import { setWeek } from '../../../pubUtils/timeUtil'; -import { getAllServers } from '../../../services/redisService'; export default function (app: Application) { new HandlerService(app, {}); diff --git a/game-server/app/services/guildActivityObjService.ts b/game-server/app/services/guildActivityObjService.ts index 059a017b2..7d38951f2 100644 --- a/game-server/app/services/guildActivityObjService.ts +++ b/game-server/app/services/guildActivityObjService.ts @@ -7,7 +7,7 @@ import { RewardInter } from "../pubUtils/interface"; import { getRaceEventItems, gameData } from "../pubUtils/data"; import { GuildModel } from "../db/Guild"; import { sendSingleRaceActEndMsg } from "./guildActivityService"; -import { REDIS_KEY, RACE_EVENT_TYPE, RACE_EVENT_EFFECT_TYPE, RACE_EVENT, STATUS } from "../consts"; +import { REDIS_KEY, RACE_EVENT_TYPE, RACE_EVENT_EFFECT_TYPE, RACE_EVENT, STATUS, RACE_ACTIVITY_STATUS } from "../consts"; import { getGuildChannelSid } from "./chatService"; import { pinus } from "pinus"; import { getRandEelm, sortArrRandom, resResult } from "../pubUtils/util"; @@ -203,9 +203,9 @@ export class CityActivityObject { } -// 军团诸侯混战等数据 +// 粮草先行 export class RaceActivityObject { - private status = 0; // 活动状态 0-未开始 1-已开始 2-已结束 // TODO 写进const表 + private status = RACE_ACTIVITY_STATUS.WAITING; // 活动状态 0-未开始 1-已开始 2-已结束 public guildList: Array<{ serverId: number, guildCode: string }> = []; // 所有军团 private members: Map> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}] private woodenHorses: Map = new Map(); // 每个军团的木牛流马 guildCode => WoodenHorse @@ -244,7 +244,7 @@ export class RaceActivityObject { woodenHorse.joinMember(roleId, roleName, sid) this.pushMember(guildCode, roleId, job); - if(this.status == 1) { // TODO 写进const表 + if(this.status == RACE_ACTIVITY_STATUS.START) { let item = getRaceEventItems(); this.handleItems(roleId, sid, item); this.woodenHorseStartRace(woodenHorse); @@ -265,13 +265,15 @@ export class RaceActivityObject { let woodenHorse = this.woodenHorses.get(guildCode); let events = this.events.get(guildCode)||[]; let needSendEnd = woodenHorse.calCurWoodenHorse(events); - if(woodenHorse.status == 1 || woodenHorse.status == 2) { // 更新距离 // TODO 写进const表 + + if(woodenHorse.status == RACE_ACTIVITY_STATUS.START || woodenHorse.status == RACE_ACTIVITY_STATUS.END) { // 更新距离 let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId }, true, 5); await r.setRank({guildCode}, [Math.floor(woodenHorse.distance * 1000), woodenHorse.time - woodenHorse.startTime], false); let tomorrow = getTimeFun().getAfterDayWithHour(); await r.setExpire(tomorrow); + if (needSendEnd) { // 抵达后发送奖励,发送消息,结算 - await sendSingleRaceActEndMsg(guildCode, woodenHorse); + await sendSingleRaceActEndMsg(guildCode, this.woodenHorses); } } this.handleItemsByWoodenHorse(woodenHorse); @@ -297,7 +299,7 @@ export class RaceActivityObject { // 定时任务到,开始比赛,设置开始赛道,发放初始道具 public startRace() { - this.status = 1; // TODO 写进const表 + this.status = RACE_ACTIVITY_STATUS.START; let guildCodes = new Array(); for(let [code, woodenHorse] of this.woodenHorses) { if(woodenHorse.memberCnt > 0) { @@ -309,7 +311,7 @@ export class RaceActivityObject { } private woodenHorseStartRace(woodenHorse: WoodenHorse) { - woodenHorse.status = 1; // TODO 写进const表 + woodenHorse.status = RACE_ACTIVITY_STATUS.START; woodenHorse.time = Date.now(); woodenHorse.startTime = Date.now(); let members = woodenHorse.members; diff --git a/game-server/app/services/guildActivityService.ts b/game-server/app/services/guildActivityService.ts index 34cdb613f..b792eef0c 100644 --- a/game-server/app/services/guildActivityService.ts +++ b/game-server/app/services/guildActivityService.ts @@ -22,6 +22,7 @@ import { GateActivityObject, CityActivityObject, RaceActivityObject } from "./gu import { Rank } from "./rankService"; import { BossInstanceModel } from "../db/BossInstance"; import { UserGuildModel } from "../db/UserGuild"; +import { raceActivityEnd } from "./timeTaskService"; let gateActivityObj: GateActivityObject; let cityActivityObj: CityActivityObject; @@ -366,10 +367,10 @@ export async function sendSingleCityActEndMsg(cityId: number, serverId: number) * 单个军团抵达赛道之后给他发奖励 * @param guildCode 军团code */ -export async function sendSingleRaceActEndMsg(guildCode: string, woodenHorse: WoodenHorse) { +export async function sendSingleRaceActEndMsg(guildCode: string, woodenHorses: Map) { let chatSid = await getGuildChannelSid(guildCode); pinus.app.rpc.chat.guildRemote.sendGuildActivityEnd.toServer(chatSid, guildCode); - await raceActivitySettleReward(guildCode, woodenHorse); + // await raceActivitySettleReward(guildCode, woodenHorse); } diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index a68a15985..7b1884129 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -349,32 +349,6 @@ async function guildActivitySchedule() { await delGuildActivityRank(dicGuildActivity.id); scheduleJob('guildActivityStart', `${dicGuildActivity.startSeconds} ${dicGuildActivity.startMinute} ${dicGuildActivity.startTime} * * ?`, guildActivityStartSchedule); - - let statusResult = getGuildActivityByDic(dicGuildActivity); - if (!statusResult) return; - - if (statusResult.status == GUILD_ACTIVITY_STATUS.START) { - // 断掉活动续期 - if (!guildActSecondsJobId) { - if (dicGuildActivity.id == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) { - guildActSecondsJobId = scheduleJob('guildActivitySeconds', `*/10 * * * * *`, gateActivitySeconds); - } else if (dicGuildActivity.id == GUILD_ACTIVITY_TYPE.CITY_ACTIVITY) { - guildActSecondsJobId = scheduleJob('guildActivitySeconds', `*/10 * * * * *`, cityActivitySeconds); - } else if (dicGuildActivity.id == GUILD_ACTIVITY_TYPE.RACE_ACTIVITY) { - guildActSecondsJobId = scheduleJob('guildActivitySeconds', `*/1 * * * * *`, raceActivitySeconds); - } - } - - if (!guildActEndJobId) { - if (dicGuildActivity.id == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) { - guildActEndJobId = scheduleJob('guildActivityEnd', statusResult.time, gateActivityEnd); - } else if (dicGuildActivity.id == GUILD_ACTIVITY_TYPE.CITY_ACTIVITY) { - guildActEndJobId = scheduleJob('guildActivityEnd', statusResult.time, cityActivityEnd); - } else if (dicGuildActivity.id == GUILD_ACTIVITY_TYPE.RACE_ACTIVITY) { - guildActEndJobId = scheduleJob('guildActivityEnd', statusResult.time, raceActivityEnd); - } - } - } } // 军团晚间活动,每天8点开始 @@ -426,10 +400,7 @@ export async function gateActivityEnd() { console.log('*****gateActivityEnd'); await sendEndMsgToAll(); - let servers = pinus.app.getServersByType('guild'); - for (let { id } of servers) { - await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.toServer(id, GUILD_ACTIVITY_TYPE.GATE_ACTIVITY); - } + await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.broadcast(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY); if (guildActSecondsJobId) { guildActSecondsJobId.cancel(); @@ -444,10 +415,7 @@ export async function gateActivityEnd() { // 每10秒下发一次的任务 export async function gateActivitySeconds() { console.log('*****gateActivitySeconds') - let servers = pinus.app.getServersByType('guild'); - for (let { id } of servers) { - await pinus.app.rpc.guild.guildActivityRemote.sendRankToGuilds.toServer(id, GUILD_ACTIVITY_TYPE.GATE_ACTIVITY); - } + await pinus.app.rpc.guild.guildActivityRemote.sendRankToGuilds.broadcast(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY); } // 诸侯混战 @@ -455,10 +423,7 @@ export async function gateActivitySeconds() { export async function cityActivityEnd() { console.log('*****cityActivityEnd'); await sendEndMsgToAll(); - let servers = pinus.app.getServersByType('guild'); - for (let { id } of servers) { - await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.toServer(id, GUILD_ACTIVITY_TYPE.CITY_ACTIVITY); - } + await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.broadcast(GUILD_ACTIVITY_TYPE.CITY_ACTIVITY); // 发完之后再做下周自动宣战 let serverlists = await getAllServers(); @@ -478,10 +443,7 @@ export async function cityActivityEnd() { // 每10秒下发一次的任务 export async function cityActivitySeconds() { console.log('*****cityActivitySeconds') - let servers = pinus.app.getServersByType('guild'); - for (let { id } of servers) { - await pinus.app.rpc.guild.guildActivityRemote.sendRankToGuilds.toServer(id, GUILD_ACTIVITY_TYPE.CITY_ACTIVITY); - } + await pinus.app.rpc.guild.guildActivityRemote.sendRankToGuilds.broadcast(GUILD_ACTIVITY_TYPE.CITY_ACTIVITY); } // 粮草先行 @@ -489,10 +451,7 @@ export async function cityActivitySeconds() { export async function raceActivityEnd() { console.log('*****raceActivityEnd'); await sendEndMsgToAll(); - let servers = pinus.app.getServersByType('guild'); - for (let { id } of servers) { - await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.toServer(id, GUILD_ACTIVITY_TYPE.RACE_ACTIVITY); - } + await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.broadcast(GUILD_ACTIVITY_TYPE.RACE_ACTIVITY); if (guildActSecondsJobId) { guildActSecondsJobId.cancel(); diff --git a/shared/consts/constModules/guildConst.ts b/shared/consts/constModules/guildConst.ts index 6e2fae18c..23d5c44f7 100644 --- a/shared/consts/constModules/guildConst.ts +++ b/shared/consts/constModules/guildConst.ts @@ -303,4 +303,11 @@ export enum RACE_EVENT_TYPE { export enum RACE_EVENT_EFFECT_TYPE { GOOD = 1, // 好事件 BAD = 2, // 坏事件 +} + +// 粮草先行状态 +export enum RACE_ACTIVITY_STATUS { + WAITING = 0, // 未开始 + START = 1, // 已开始 + END = 2 // 已结束 } \ No newline at end of file diff --git a/shared/domain/battleField/guildActivity.ts b/shared/domain/battleField/guildActivity.ts index 6d3fda9af..0d2638186 100644 --- a/shared/domain/battleField/guildActivity.ts +++ b/shared/domain/battleField/guildActivity.ts @@ -1,7 +1,7 @@ import { GUILDACTIVITY } from "../../pubUtils/dicParam"; import { SimpleGuildRankParam, SimpleRoleRankParam } from '../rank' import { prop } from "@typegoose/typegoose"; -import { CITY_STATUS, RACE_EVENT } from "../../consts"; +import { CITY_STATUS, RACE_ACTIVITY_STATUS, RACE_EVENT } from "../../consts"; import { gameData, getRaceEventItems } from "../../pubUtils/data"; import { getRandEelm } from "../../pubUtils/util"; import { RewardInter } from "../../pubUtils/interface"; @@ -68,15 +68,15 @@ export class WoodenHorse { * @returns {boolean} needSendEnd 是否跑到终点发送结束新号 */ public calCurWoodenHorse(events: Event[]): boolean { - if(this.status == 2) return false; // TODO 写进const表 - if(this.status == 0 && this.stopContinueTime && Date.now() > this.stopContinueTime) { - this.status = 1; this.stopContinueTime = 0; + if(this.status == RACE_ACTIVITY_STATUS.END) return false; + if(this.status == RACE_ACTIVITY_STATUS.WAITING && this.stopContinueTime && Date.now() > this.stopContinueTime) { + this.status = RACE_ACTIVITY_STATUS.START; this.stopContinueTime = 0; } - if(this.status == 1) { + if(this.status == RACE_ACTIVITY_STATUS.START) { if(this.distance >= GUILDACTIVITY.RACEACTIVITY_LENGTH) { this.distance = GUILDACTIVITY.RACEACTIVITY_LENGTH; - this.status = 2; + this.status = RACE_ACTIVITY_STATUS.END; return true; } @@ -117,12 +117,18 @@ export class WoodenHorse { this.calEvent(id, count, endTime); } if(this.durability <= 0) { - this.status = 0; // TODO 写进const表 + this.status = RACE_ACTIVITY_STATUS.END; this.speed = 0; + return true } return false; } + public isOver() { + if(this.status == RACE_ACTIVITY_STATUS.END) return true; + return false + } + private calEvent(id: number, count: number = 1, endTime?: number) { let { effect } = gameData.raceActivityEvents.get(id); @@ -142,7 +148,7 @@ export class WoodenHorse { case RACE_EVENT.GUISHOUYINFU: if (this.shieldTime < Date.now()) { this.stopContinueTime = endTime; - this.status = 0; // TODO 写进const表 + this.status = RACE_ACTIVITY_STATUS.WAITING; this.time = endTime; this.speed = 0; }