粮草先行:加入信息接续

This commit is contained in:
luying
2022-09-27 11:50:04 +08:00
parent 4e1c334a27
commit 10a8215c89
7 changed files with 42 additions and 52 deletions

View File

@@ -32,6 +32,7 @@ import { connectThinkingData, getTire } from './app/services/sdkService';
import { loadGmDb } from './app/db';
import { loadActivities } from './app/services/activity/activityRemoteService';
import { checkAndSetApiIsClose } from './app/services/chatService';
import { initGuildActivityIndexInPinus, resetJoinWoodenHorse } from './app/services/guildActivity/guildActivityService';
const filePath = (_pinus as any).FILEPATH;
filePath.MASTER = '/config/master';
@@ -178,6 +179,7 @@ async function treatStartLogic(app: _pinus.Application) {
if(app.getServerType() == 'systimer') {
redisService.redisSubScribe();
timeTaskService.init();
initGuildActivityIndexInPinus();
}
if(app.getServerType() == 'chat') {
getTire();
@@ -187,6 +189,10 @@ async function treatStartLogic(app: _pinus.Application) {
}
treatStartMainten(app);
checkAndSetApiIsClose();
if(app.getServerType() == 'guild') {
initGuildActivityIndexInPinus()
.then(resetJoinWoodenHorse);
}
if(app.isMaster()) {
redisService.initAllRank();

View File

@@ -103,6 +103,7 @@ export class RaceActivityHandler {
let myGuild = await UserGuildModel.getMyGuild(roleId, 'job');
let woodenHorse = await obj.joinWoodenHorse(guildCode, roleId, roleName, serverId, sid, myGuild.job, myGuildActivityRec.code);
if (!woodenHorse) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
await GuildActivityRecordModel.join(guildCode, serverId, this.aid, joinIndex, { roleId, roleName, job: myGuild.job, code: myGuildActivityRec.code });
let events = obj.getEvents(guildCode, woodenHorse.distance);
await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.GUILD_RACE_JOIN, { timestamp: Date.now(), woodenHorse });
@@ -251,20 +252,4 @@ export class RaceActivityHandler {
return resResult(STATUS.SUCCESS);
}
// 加入木马
async debugResetJoin(msg: { magicWord: string }, session: BackendSession) {
const { magicWord } = msg;
if (magicWord !== DEBUG_MAGIC_WORD) {
return resResult(STATUS.TOKEN_ERR);
}
let servers = await ServerlistModel.findByEnv(pinus.app.get('env'));
let guild = pinus.app.getServersByType('guild');
for(let { id: serverId } of servers) {
let sid = dispatch(`${serverId}`, guild);
pinus.app.rpc.guild.guildActivityRemote.debugResetJoin.toServer(sid.id, serverId);
}
return resResult(STATUS.SUCCESS);
}
}

View File

@@ -1,5 +1,5 @@
import { Application, ChannelService, HandlerService, } from 'pinus';
import { sendAllGuildRanks, calWoodenHorseAndSend, sendRaceStartMsg, setDicGuildActivity, setDicAuctionTime, settleGuildActivityReward, clearActivityObj, getGAPinusName, getCurGuildActivityIndexByDb, initGuildActivityIndexInPinus, setGuildActivityIndexInPinus, guildActivityStart, debugResetJoin, debugSendGateHp, debugAddHorse } from '../../../services/guildActivity/guildActivityService';
import { sendAllGuildRanks, calWoodenHorseAndSend, sendRaceStartMsg, setDicGuildActivity, setDicAuctionTime, settleGuildActivityReward, clearActivityObj, setGuildActivityIndexInPinus, guildActivityStart, debugSendGateHp, debugAddHorse } from '../../../services/guildActivity/guildActivityService';
import { gameData } from '../../../pubUtils/data';
import { setWeek } from '../../../pubUtils/timeUtil';
import { sendUngotDividend } from '../../../services/auctionService';
@@ -16,7 +16,6 @@ export class GuildActivityRemote {
constructor(private app: Application) {
this.app = app;
initGuildActivityIndexInPinus();
}
private currentTime: number = Date.now();
@@ -191,14 +190,6 @@ export class GuildActivityRemote {
}
}
async debugResetJoin(serverId: number) {
try {
await debugResetJoin(serverId);
} catch(e) {
errlogger.error(`remote ${__filename} \n ${e.stack}`);
}
}
public async debugSendGateHp(serverId: number, cityId: number) {
try {
await debugSendGateHp(serverId, cityId);

View File

@@ -4,7 +4,7 @@ import PvpDefenseType from '../../../db/PvpDefense';
import { DicGuildActivity } from '../../../pubUtils/dictionary/DicGuildActivity';
import { reloadResources } from '../../../pubUtils/data';
import { setMarquee, cancelMarquee } from '../../../services/gmService';
import { initGuildActivityIndexInPinus, setDicAuctionTime, setDicGuildActivity } from '../../../services/guildActivity/guildActivityService';
import { setDicAuctionTime, setDicGuildActivity } from '../../../services/guildActivity/guildActivityService';
import { setWeek } from '../../../pubUtils/timeUtil';
import { ServerlistType } from '../../../db/Serverlist';
import { MarqueeType } from '../../../db/Marquee';
@@ -27,7 +27,6 @@ export class SystimerRemote {
constructor(private app: Application) {
this.app = app;
this.channelService = app.get('channelService');
initGuildActivityIndexInPinus();
}
private channelService: ChannelService;

View File

@@ -32,6 +32,7 @@ import { getRandSingleEelm } from "../../pubUtils/util";
import { CounterModel } from "../../db/Counter";
import { setInterval } from "timers";
import { DicRaceActivity } from "../../pubUtils/dictionary/DicRaceActivity";
import { dispatch } from "../../pubUtils/dispatcher";
let gateActivityObj: GateActivityObject;
let cityActivityObj: CityActivityObject;
@@ -873,32 +874,20 @@ export function getJoinIndex() {
}
export async function debugResetJoin(serverId: number) {
let serverRecord = await ServerRecordModel.findTomorrowData(serverId);
let members = serverRecord?.activeGuildMembers||[];
let joinIndex = getJoinIndex();
export async function resetJoinWoodenHorse() {
let obj = getRaceActivityObj();
for(let roleId of members) {
let role = await RoleModel.findByRoleId(roleId);
if(role) {
let guildCode = role.guildCode;
let roleName = role.roleName;
let joinIndex = getJoinIndex();
let guild = pinus.app.getServersByType('guild');
let recs = await GuildActivityRecordModel.findRecs(GUILD_ACTIVITY_TYPE.RACE_ACTIVITY, joinIndex);
for(let { serverId, guildCode, joinMember } of recs) {
let server = dispatch(`${serverId}`, guild);
if(server.id != pinus.app.getServerId()) continue;
for(let { roleId, roleName, job, code} of joinMember) {
let hasJoin = !!obj.getMember(guildCode, roleId);
if (hasJoin) continue;
let guildActivityRec = await GuildActivityRecordModel.getRecord(guildCode, serverId, GUILD_ACTIVITY_TYPE.RACE_ACTIVITY, joinIndex, obj.getEvents(guildCode, 0));
if (!guildActivityRec) return false;
let { code: sourceCode } = guildActivityRec;
let myGuildActivityRec = await UserGuildActivityRecModel.getRecord(roleId, roleName, guildCode, serverId, sourceCode, GUILD_ACTIVITY_TYPE.RACE_ACTIVITY);
let myGuild = await UserGuildModel.getMyGuild(roleId, 'job');
if(myGuild) {
let woodenHorse = await obj.joinWoodenHorse(guildCode, roleId, roleName, serverId, '', myGuild.job, myGuildActivityRec.code);
}
await obj.joinWoodenHorse(guildCode, roleId, roleName, serverId, '', job, code);
}
}
return true

View File

@@ -2,7 +2,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { ItemReward } from '../domain/dbGeneral';
import { genCode } from '../pubUtils/util';
import { Member, WoodenHorse, Event } from '../domain/battleField/guildActivity'
import { Member, WoodenHorse, Event, JoinMember } from '../domain/battleField/guildActivity'
@index({ code: 1 })
@@ -42,6 +42,9 @@ export default class GuildActivityRecord extends BaseModel {
@prop({ required: true, type: Member, default: [], _id: false })
members: Member[]; // 参与活动的团员的roleId列表
@prop({ required: true, type: JoinMember, default: [], _id: false })
joinMember: JoinMember[]; // 参与活动的团员的roleId列表
@prop({ required: true, default: 0 })
memberCnt: number; // 参加的团员的数量
@@ -102,6 +105,18 @@ export default class GuildActivityRecord extends BaseModel {
const rec = await GuildActivityRecordModel.findOne({ guildCode, auctionType: sourceType, code: sourceCode }).select('members aid rank challengeCityId').lean();
return rec;
}
public static async join(guildCode: string, serverId: number, aid: number, index: number, member: JoinMember) {
let rec: GuildActivityRecordType = await GuildActivityRecordModel.findOneAndUpdate(
{ guildCode, serverId, index, aid, status: 1 },
{ $push: { joinMember: member }, $setOnInsert: { code: genCode(10) } }, { new: true, upsert: true }).lean();
return rec;
}
public static async findRecs(aid: number, index: number) {
let rec: GuildActivityRecordType[] = await GuildActivityRecordModel.find({ index, aid, status: 1 }).lean();
return rec;
}
}
export const GuildActivityRecordModel = getModelForClass(GuildActivityRecord);

View File

@@ -363,6 +363,11 @@ export class Member {
code?: string; // 玩家的当前记录的code
}
export class JoinMember extends Member{
@prop({required: true})
roleName: string; // 玩家名
}
export class CityParam {
cityId: number = 0; // 城池id
guardGuildCode: string = ''; // 占领军团id