军团活动:修复粮草先行到达条件

This commit is contained in:
luying
2021-09-27 17:38:58 +08:00
parent b72dc3b702
commit 4267209009
7 changed files with 40 additions and 65 deletions
@@ -9,6 +9,7 @@ import { addActive } from "../../../services/guildService";
import { Rank } from "../../../services/rankService"; import { Rank } from "../../../services/rankService";
import { checkActivityTask, checkTask } from "../../../services/taskService"; import { checkActivityTask, checkTask } from "../../../services/taskService";
import { guildInter } from "../../../pubUtils/interface"; import { guildInter } from "../../../pubUtils/interface";
import { RaceActivityObject } from "../../../services/guildActivityObjService";
export default function (app: Application) { export default function (app: Application) {
new HandlerService(app, {}); new HandlerService(app, {});
@@ -2,7 +2,6 @@ import { Application, ChannelService, HandlerService, } from 'pinus';
import { sendAllGuildRanks, sendGuildActEndMsg, calWoodenHorseAndSend, sendRaceStartMsg } from '../../../services/guildActivityService'; import { sendAllGuildRanks, sendGuildActEndMsg, calWoodenHorseAndSend, sendRaceStartMsg } from '../../../services/guildActivityService';
import { gameData } from '../../../pubUtils/data'; import { gameData } from '../../../pubUtils/data';
import { setWeek } from '../../../pubUtils/timeUtil'; import { setWeek } from '../../../pubUtils/timeUtil';
import { getAllServers } from '../../../services/redisService';
export default function (app: Application) { export default function (app: Application) {
new HandlerService(app, {}); new HandlerService(app, {});
@@ -7,7 +7,7 @@ import { RewardInter } from "../pubUtils/interface";
import { getRaceEventItems, gameData } from "../pubUtils/data"; import { getRaceEventItems, gameData } from "../pubUtils/data";
import { GuildModel } from "../db/Guild"; import { GuildModel } from "../db/Guild";
import { sendSingleRaceActEndMsg } from "./guildActivityService"; 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 { getGuildChannelSid } from "./chatService";
import { pinus } from "pinus"; import { pinus } from "pinus";
import { getRandEelm, sortArrRandom, resResult } from "../pubUtils/util"; import { getRandEelm, sortArrRandom, resResult } from "../pubUtils/util";
@@ -203,9 +203,9 @@ export class CityActivityObject {
} }
// 军团诸侯混战等数据 // 粮草先行
export class RaceActivityObject { 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 }> = []; // 所有军团 public guildList: Array<{ serverId: number, guildCode: string }> = []; // 所有军团
private members: Map<string, Array<Member>> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}] private members: Map<string, Array<Member>> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}]
private woodenHorses: Map<string, WoodenHorse> = new Map(); // 每个军团的木牛流马 guildCode => WoodenHorse private woodenHorses: Map<string, WoodenHorse> = new Map(); // 每个军团的木牛流马 guildCode => WoodenHorse
@@ -244,7 +244,7 @@ export class RaceActivityObject {
woodenHorse.joinMember(roleId, roleName, sid) woodenHorse.joinMember(roleId, roleName, sid)
this.pushMember(guildCode, roleId, job); this.pushMember(guildCode, roleId, job);
if(this.status == 1) { // TODO 写进const表 if(this.status == RACE_ACTIVITY_STATUS.START) {
let item = getRaceEventItems(); let item = getRaceEventItems();
this.handleItems(roleId, sid, item); this.handleItems(roleId, sid, item);
this.woodenHorseStartRace(woodenHorse); this.woodenHorseStartRace(woodenHorse);
@@ -265,13 +265,15 @@ export class RaceActivityObject {
let woodenHorse = this.woodenHorses.get(guildCode); let woodenHorse = this.woodenHorses.get(guildCode);
let events = this.events.get(guildCode)||[]; let events = this.events.get(guildCode)||[];
let needSendEnd = woodenHorse.calCurWoodenHorse(events); 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); 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); await r.setRank({guildCode}, [Math.floor(woodenHorse.distance * 1000), woodenHorse.time - woodenHorse.startTime], false);
let tomorrow = <number>getTimeFun().getAfterDayWithHour(); let tomorrow = <number>getTimeFun().getAfterDayWithHour();
await r.setExpire(tomorrow); await r.setExpire(tomorrow);
if (needSendEnd) { // 抵达后发送奖励,发送消息,结算 if (needSendEnd) { // 抵达后发送奖励,发送消息,结算
await sendSingleRaceActEndMsg(guildCode, woodenHorse); await sendSingleRaceActEndMsg(guildCode, this.woodenHorses);
} }
} }
this.handleItemsByWoodenHorse(woodenHorse); this.handleItemsByWoodenHorse(woodenHorse);
@@ -297,7 +299,7 @@ export class RaceActivityObject {
// 定时任务到,开始比赛,设置开始赛道,发放初始道具 // 定时任务到,开始比赛,设置开始赛道,发放初始道具
public startRace() { public startRace() {
this.status = 1; // TODO 写进const表 this.status = RACE_ACTIVITY_STATUS.START;
let guildCodes = new Array<string>(); let guildCodes = new Array<string>();
for(let [code, woodenHorse] of this.woodenHorses) { for(let [code, woodenHorse] of this.woodenHorses) {
if(woodenHorse.memberCnt > 0) { if(woodenHorse.memberCnt > 0) {
@@ -309,7 +311,7 @@ export class RaceActivityObject {
} }
private woodenHorseStartRace(woodenHorse: WoodenHorse) { private woodenHorseStartRace(woodenHorse: WoodenHorse) {
woodenHorse.status = 1; // TODO 写进const表 woodenHorse.status = RACE_ACTIVITY_STATUS.START;
woodenHorse.time = Date.now(); woodenHorse.time = Date.now();
woodenHorse.startTime = Date.now(); woodenHorse.startTime = Date.now();
let members = woodenHorse.members; let members = woodenHorse.members;
@@ -22,6 +22,7 @@ import { GateActivityObject, CityActivityObject, RaceActivityObject } from "./gu
import { Rank } from "./rankService"; import { Rank } from "./rankService";
import { BossInstanceModel } from "../db/BossInstance"; import { BossInstanceModel } from "../db/BossInstance";
import { UserGuildModel } from "../db/UserGuild"; import { UserGuildModel } from "../db/UserGuild";
import { raceActivityEnd } from "./timeTaskService";
let gateActivityObj: GateActivityObject; let gateActivityObj: GateActivityObject;
let cityActivityObj: CityActivityObject; let cityActivityObj: CityActivityObject;
@@ -366,10 +367,10 @@ export async function sendSingleCityActEndMsg(cityId: number, serverId: number)
* 单个军团抵达赛道之后给他发奖励 * 单个军团抵达赛道之后给他发奖励
* @param guildCode 军团code * @param guildCode 军团code
*/ */
export async function sendSingleRaceActEndMsg(guildCode: string, woodenHorse: WoodenHorse) { export async function sendSingleRaceActEndMsg(guildCode: string, woodenHorses: Map<string, WoodenHorse>) {
let chatSid = await getGuildChannelSid(guildCode); let chatSid = await getGuildChannelSid(guildCode);
pinus.app.rpc.chat.guildRemote.sendGuildActivityEnd.toServer(chatSid, guildCode); pinus.app.rpc.chat.guildRemote.sendGuildActivityEnd.toServer(chatSid, guildCode);
await raceActivitySettleReward(guildCode, woodenHorse); // await raceActivitySettleReward(guildCode, woodenHorse);
} }
+5 -46
View File
@@ -349,32 +349,6 @@ async function guildActivitySchedule() {
await delGuildActivityRank(dicGuildActivity.id); await delGuildActivityRank(dicGuildActivity.id);
scheduleJob('guildActivityStart', `${dicGuildActivity.startSeconds} ${dicGuildActivity.startMinute} ${dicGuildActivity.startTime} * * ?`, guildActivityStartSchedule); 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点开始 // 军团晚间活动,每天8点开始
@@ -426,10 +400,7 @@ export async function gateActivityEnd() {
console.log('*****gateActivityEnd'); console.log('*****gateActivityEnd');
await sendEndMsgToAll(); await sendEndMsgToAll();
let servers = pinus.app.getServersByType('guild'); await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.broadcast(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
for (let { id } of servers) {
await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.toServer(id, GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
}
if (guildActSecondsJobId) { if (guildActSecondsJobId) {
guildActSecondsJobId.cancel(); guildActSecondsJobId.cancel();
@@ -444,10 +415,7 @@ export async function gateActivityEnd() {
// 每10秒下发一次的任务 // 每10秒下发一次的任务
export async function gateActivitySeconds() { export async function gateActivitySeconds() {
console.log('*****gateActivitySeconds') console.log('*****gateActivitySeconds')
let servers = pinus.app.getServersByType('guild'); await pinus.app.rpc.guild.guildActivityRemote.sendRankToGuilds.broadcast(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
for (let { id } of servers) {
await pinus.app.rpc.guild.guildActivityRemote.sendRankToGuilds.toServer(id, GUILD_ACTIVITY_TYPE.GATE_ACTIVITY);
}
} }
// 诸侯混战 // 诸侯混战
@@ -455,10 +423,7 @@ export async function gateActivitySeconds() {
export async function cityActivityEnd() { export async function cityActivityEnd() {
console.log('*****cityActivityEnd'); console.log('*****cityActivityEnd');
await sendEndMsgToAll(); await sendEndMsgToAll();
let servers = pinus.app.getServersByType('guild'); await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.broadcast(GUILD_ACTIVITY_TYPE.CITY_ACTIVITY);
for (let { id } of servers) {
await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.toServer(id, GUILD_ACTIVITY_TYPE.CITY_ACTIVITY);
}
// 发完之后再做下周自动宣战 // 发完之后再做下周自动宣战
let serverlists = await getAllServers(); let serverlists = await getAllServers();
@@ -478,10 +443,7 @@ export async function cityActivityEnd() {
// 每10秒下发一次的任务 // 每10秒下发一次的任务
export async function cityActivitySeconds() { export async function cityActivitySeconds() {
console.log('*****cityActivitySeconds') console.log('*****cityActivitySeconds')
let servers = pinus.app.getServersByType('guild'); await pinus.app.rpc.guild.guildActivityRemote.sendRankToGuilds.broadcast(GUILD_ACTIVITY_TYPE.CITY_ACTIVITY);
for (let { id } of servers) {
await pinus.app.rpc.guild.guildActivityRemote.sendRankToGuilds.toServer(id, GUILD_ACTIVITY_TYPE.CITY_ACTIVITY);
}
} }
// 粮草先行 // 粮草先行
@@ -489,10 +451,7 @@ export async function cityActivitySeconds() {
export async function raceActivityEnd() { export async function raceActivityEnd() {
console.log('*****raceActivityEnd'); console.log('*****raceActivityEnd');
await sendEndMsgToAll(); await sendEndMsgToAll();
let servers = pinus.app.getServersByType('guild'); await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.broadcast(GUILD_ACTIVITY_TYPE.RACE_ACTIVITY);
for (let { id } of servers) {
await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.toServer(id, GUILD_ACTIVITY_TYPE.RACE_ACTIVITY);
}
if (guildActSecondsJobId) { if (guildActSecondsJobId) {
guildActSecondsJobId.cancel(); guildActSecondsJobId.cancel();
+7
View File
@@ -304,3 +304,10 @@ export enum RACE_EVENT_EFFECT_TYPE {
GOOD = 1, // 好事件 GOOD = 1, // 好事件
BAD = 2, // 坏事件 BAD = 2, // 坏事件
} }
// 粮草先行状态
export enum RACE_ACTIVITY_STATUS {
WAITING = 0, // 未开始
START = 1, // 已开始
END = 2 // 已结束
}
+14 -8
View File
@@ -1,7 +1,7 @@
import { GUILDACTIVITY } from "../../pubUtils/dicParam"; import { GUILDACTIVITY } from "../../pubUtils/dicParam";
import { SimpleGuildRankParam, SimpleRoleRankParam } from '../rank' import { SimpleGuildRankParam, SimpleRoleRankParam } from '../rank'
import { prop } from "@typegoose/typegoose"; 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 { gameData, getRaceEventItems } from "../../pubUtils/data";
import { getRandEelm } from "../../pubUtils/util"; import { getRandEelm } from "../../pubUtils/util";
import { RewardInter } from "../../pubUtils/interface"; import { RewardInter } from "../../pubUtils/interface";
@@ -68,15 +68,15 @@ export class WoodenHorse {
* @returns {boolean} needSendEnd 是否跑到终点发送结束新号 * @returns {boolean} needSendEnd 是否跑到终点发送结束新号
*/ */
public calCurWoodenHorse(events: Event[]): boolean { public calCurWoodenHorse(events: Event[]): boolean {
if(this.status == 2) return false; // TODO 写进const表 if(this.status == RACE_ACTIVITY_STATUS.END) return false;
if(this.status == 0 && this.stopContinueTime && Date.now() > this.stopContinueTime) { if(this.status == RACE_ACTIVITY_STATUS.WAITING && this.stopContinueTime && Date.now() > this.stopContinueTime) {
this.status = 1; this.stopContinueTime = 0; 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) { if(this.distance >= GUILDACTIVITY.RACEACTIVITY_LENGTH) {
this.distance = GUILDACTIVITY.RACEACTIVITY_LENGTH; this.distance = GUILDACTIVITY.RACEACTIVITY_LENGTH;
this.status = 2; this.status = RACE_ACTIVITY_STATUS.END;
return true; return true;
} }
@@ -117,12 +117,18 @@ export class WoodenHorse {
this.calEvent(id, count, endTime); this.calEvent(id, count, endTime);
} }
if(this.durability <= 0) { if(this.durability <= 0) {
this.status = 0; // TODO 写进const表 this.status = RACE_ACTIVITY_STATUS.END;
this.speed = 0; this.speed = 0;
return true
} }
return false; return false;
} }
public isOver() {
if(this.status == RACE_ACTIVITY_STATUS.END) return true;
return false
}
private calEvent(id: number, count: number = 1, endTime?: number) { private calEvent(id: number, count: number = 1, endTime?: number) {
let { effect } = gameData.raceActivityEvents.get(id); let { effect } = gameData.raceActivityEvents.get(id);
@@ -142,7 +148,7 @@ export class WoodenHorse {
case RACE_EVENT.GUISHOUYINFU: case RACE_EVENT.GUISHOUYINFU:
if (this.shieldTime < Date.now()) { if (this.shieldTime < Date.now()) {
this.stopContinueTime = endTime; this.stopContinueTime = endTime;
this.status = 0; // TODO 写进const表 this.status = RACE_ACTIVITY_STATUS.WAITING;
this.time = endTime; this.time = endTime;
this.speed = 0; this.speed = 0;
} }