粮草先行:加入信息接续
This commit is contained in:
@@ -32,6 +32,7 @@ import { connectThinkingData, getTire } from './app/services/sdkService';
|
|||||||
import { loadGmDb } from './app/db';
|
import { loadGmDb } from './app/db';
|
||||||
import { loadActivities } from './app/services/activity/activityRemoteService';
|
import { loadActivities } from './app/services/activity/activityRemoteService';
|
||||||
import { checkAndSetApiIsClose } from './app/services/chatService';
|
import { checkAndSetApiIsClose } from './app/services/chatService';
|
||||||
|
import { initGuildActivityIndexInPinus, resetJoinWoodenHorse } from './app/services/guildActivity/guildActivityService';
|
||||||
|
|
||||||
const filePath = (_pinus as any).FILEPATH;
|
const filePath = (_pinus as any).FILEPATH;
|
||||||
filePath.MASTER = '/config/master';
|
filePath.MASTER = '/config/master';
|
||||||
@@ -178,6 +179,7 @@ async function treatStartLogic(app: _pinus.Application) {
|
|||||||
if(app.getServerType() == 'systimer') {
|
if(app.getServerType() == 'systimer') {
|
||||||
redisService.redisSubScribe();
|
redisService.redisSubScribe();
|
||||||
timeTaskService.init();
|
timeTaskService.init();
|
||||||
|
initGuildActivityIndexInPinus();
|
||||||
}
|
}
|
||||||
if(app.getServerType() == 'chat') {
|
if(app.getServerType() == 'chat') {
|
||||||
getTire();
|
getTire();
|
||||||
@@ -187,6 +189,10 @@ async function treatStartLogic(app: _pinus.Application) {
|
|||||||
}
|
}
|
||||||
treatStartMainten(app);
|
treatStartMainten(app);
|
||||||
checkAndSetApiIsClose();
|
checkAndSetApiIsClose();
|
||||||
|
if(app.getServerType() == 'guild') {
|
||||||
|
initGuildActivityIndexInPinus()
|
||||||
|
.then(resetJoinWoodenHorse);
|
||||||
|
}
|
||||||
|
|
||||||
if(app.isMaster()) {
|
if(app.isMaster()) {
|
||||||
redisService.initAllRank();
|
redisService.initAllRank();
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ export class RaceActivityHandler {
|
|||||||
let myGuild = await UserGuildModel.getMyGuild(roleId, 'job');
|
let myGuild = await UserGuildModel.getMyGuild(roleId, 'job');
|
||||||
let woodenHorse = await obj.joinWoodenHorse(guildCode, roleId, roleName, serverId, sid, myGuild.job, myGuildActivityRec.code);
|
let woodenHorse = await obj.joinWoodenHorse(guildCode, roleId, roleName, serverId, sid, myGuild.job, myGuildActivityRec.code);
|
||||||
if (!woodenHorse) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH);
|
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);
|
let events = obj.getEvents(guildCode, woodenHorse.distance);
|
||||||
await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.GUILD_RACE_JOIN, { timestamp: Date.now(), woodenHorse });
|
await sendMessageToGuildWithSuc(guildCode, PUSH_ROUTE.GUILD_RACE_JOIN, { timestamp: Date.now(), woodenHorse });
|
||||||
@@ -251,20 +252,4 @@ export class RaceActivityHandler {
|
|||||||
|
|
||||||
return resResult(STATUS.SUCCESS);
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Application, ChannelService, HandlerService, } from 'pinus';
|
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 { gameData } from '../../../pubUtils/data';
|
||||||
import { setWeek } from '../../../pubUtils/timeUtil';
|
import { setWeek } from '../../../pubUtils/timeUtil';
|
||||||
import { sendUngotDividend } from '../../../services/auctionService';
|
import { sendUngotDividend } from '../../../services/auctionService';
|
||||||
@@ -16,7 +16,6 @@ export class GuildActivityRemote {
|
|||||||
|
|
||||||
constructor(private app: Application) {
|
constructor(private app: Application) {
|
||||||
this.app = app;
|
this.app = app;
|
||||||
initGuildActivityIndexInPinus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private currentTime: number = Date.now();
|
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) {
|
public async debugSendGateHp(serverId: number, cityId: number) {
|
||||||
try {
|
try {
|
||||||
await debugSendGateHp(serverId, cityId);
|
await debugSendGateHp(serverId, cityId);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import PvpDefenseType from '../../../db/PvpDefense';
|
|||||||
import { DicGuildActivity } from '../../../pubUtils/dictionary/DicGuildActivity';
|
import { DicGuildActivity } from '../../../pubUtils/dictionary/DicGuildActivity';
|
||||||
import { reloadResources } from '../../../pubUtils/data';
|
import { reloadResources } from '../../../pubUtils/data';
|
||||||
import { setMarquee, cancelMarquee } from '../../../services/gmService';
|
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 { setWeek } from '../../../pubUtils/timeUtil';
|
||||||
import { ServerlistType } from '../../../db/Serverlist';
|
import { ServerlistType } from '../../../db/Serverlist';
|
||||||
import { MarqueeType } from '../../../db/Marquee';
|
import { MarqueeType } from '../../../db/Marquee';
|
||||||
@@ -27,7 +27,6 @@ export class SystimerRemote {
|
|||||||
constructor(private app: Application) {
|
constructor(private app: Application) {
|
||||||
this.app = app;
|
this.app = app;
|
||||||
this.channelService = app.get('channelService');
|
this.channelService = app.get('channelService');
|
||||||
initGuildActivityIndexInPinus();
|
|
||||||
}
|
}
|
||||||
private channelService: ChannelService;
|
private channelService: ChannelService;
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import { getRandSingleEelm } from "../../pubUtils/util";
|
|||||||
import { CounterModel } from "../../db/Counter";
|
import { CounterModel } from "../../db/Counter";
|
||||||
import { setInterval } from "timers";
|
import { setInterval } from "timers";
|
||||||
import { DicRaceActivity } from "../../pubUtils/dictionary/DicRaceActivity";
|
import { DicRaceActivity } from "../../pubUtils/dictionary/DicRaceActivity";
|
||||||
|
import { dispatch } from "../../pubUtils/dispatcher";
|
||||||
|
|
||||||
let gateActivityObj: GateActivityObject;
|
let gateActivityObj: GateActivityObject;
|
||||||
let cityActivityObj: CityActivityObject;
|
let cityActivityObj: CityActivityObject;
|
||||||
@@ -873,32 +874,20 @@ export function getJoinIndex() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export async function debugResetJoin(serverId: number) {
|
export async function resetJoinWoodenHorse() {
|
||||||
|
|
||||||
let serverRecord = await ServerRecordModel.findTomorrowData(serverId);
|
|
||||||
let members = serverRecord?.activeGuildMembers||[];
|
|
||||||
|
|
||||||
let joinIndex = getJoinIndex();
|
|
||||||
let obj = getRaceActivityObj();
|
let obj = getRaceActivityObj();
|
||||||
for(let roleId of members) {
|
let joinIndex = getJoinIndex();
|
||||||
let role = await RoleModel.findByRoleId(roleId);
|
|
||||||
if(role) {
|
let guild = pinus.app.getServersByType('guild');
|
||||||
let guildCode = role.guildCode;
|
let recs = await GuildActivityRecordModel.findRecs(GUILD_ACTIVITY_TYPE.RACE_ACTIVITY, joinIndex);
|
||||||
let roleName = role.roleName;
|
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);
|
let hasJoin = !!obj.getMember(guildCode, roleId);
|
||||||
|
|
||||||
if (hasJoin) continue;
|
if (hasJoin) continue;
|
||||||
|
await obj.joinWoodenHorse(guildCode, roleId, roleName, serverId, '', job, code);
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import BaseModel from './BaseModel';
|
|||||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||||
import { ItemReward } from '../domain/dbGeneral';
|
import { ItemReward } from '../domain/dbGeneral';
|
||||||
import { genCode } from '../pubUtils/util';
|
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 })
|
@index({ code: 1 })
|
||||||
@@ -42,6 +42,9 @@ export default class GuildActivityRecord extends BaseModel {
|
|||||||
@prop({ required: true, type: Member, default: [], _id: false })
|
@prop({ required: true, type: Member, default: [], _id: false })
|
||||||
members: Member[]; // 参与活动的团员的roleId列表
|
members: Member[]; // 参与活动的团员的roleId列表
|
||||||
|
|
||||||
|
@prop({ required: true, type: JoinMember, default: [], _id: false })
|
||||||
|
joinMember: JoinMember[]; // 参与活动的团员的roleId列表
|
||||||
|
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
memberCnt: number; // 参加的团员的数量
|
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();
|
const rec = await GuildActivityRecordModel.findOne({ guildCode, auctionType: sourceType, code: sourceCode }).select('members aid rank challengeCityId').lean();
|
||||||
return rec;
|
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);
|
export const GuildActivityRecordModel = getModelForClass(GuildActivityRecord);
|
||||||
|
|||||||
@@ -363,6 +363,11 @@ export class Member {
|
|||||||
code?: string; // 玩家的当前记录的code
|
code?: string; // 玩家的当前记录的code
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class JoinMember extends Member{
|
||||||
|
@prop({required: true})
|
||||||
|
roleName: string; // 玩家名
|
||||||
|
}
|
||||||
|
|
||||||
export class CityParam {
|
export class CityParam {
|
||||||
cityId: number = 0; // 城池id
|
cityId: number = 0; // 城池id
|
||||||
guardGuildCode: string = ''; // 占领军团id
|
guardGuildCode: string = ''; // 占领军团id
|
||||||
|
|||||||
Reference in New Issue
Block a user