diff --git a/game-server/app/servers/battle/handler/guildTrainHandler.ts b/game-server/app/servers/battle/handler/guildTrainHandler.ts index a3b9d5c45..edcc2f052 100644 --- a/game-server/app/servers/battle/handler/guildTrainHandler.ts +++ b/game-server/app/servers/battle/handler/guildTrainHandler.ts @@ -19,6 +19,7 @@ import { GuildTrainReportModel } from '../../../db/GuildTrainReport'; import { DATA_NAME } from '../../../consts/dataName'; import { pushGuildTrainSucMsg } from '../../../services/chatService'; import { checkActivityTask, checkTask } from '../../../services/taskService'; +import { sendPopUpActivityData } from '../../../services/guildActivityService'; export default function (app: Application) { return new GuildTrainHandler(app); @@ -144,7 +145,8 @@ export class GuildTrainHandler { * @param session */ async trainBattleEnd(msg: { battleCode: string, isSuccess: boolean }, session: BackendSession) { - const { battleCode, isSuccess } = msg; + const { battleCode, } = msg; + let isSuccess = true; const roleId: string = session.get('roleId'); const serverId: number = parseInt(session.get('serverId')); const roleName: string = session.get('roleName'); @@ -251,6 +253,11 @@ export class GuildTrainHandler { guildTrain = await GuildTrainModel.updateGuildTrain(code, trainId, { ranks }); res.releaseCallback();//解锁 } + if (isComplete) {//解锁下一关,弹出礼包 // 1 true true 6Sjkgp(trainId, isComplete, needLockNext, code) + let pushMessage = await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.GUILD_TRAIN_COUNT, 1, { trainId, code }) + await sendPopUpActivityData(code, serverId, pushMessage); + } + await GuildTrainReportModel.pushGuildTrainReports(code, trainId, reports);//增加战报 let { trainCount, trainRewards } = userGuild; let result: any = getGuildTrainInfo(guildTrain, roleId, trainCount, trainRewards);//战斗后更新练兵场信息 @@ -260,7 +267,6 @@ export class GuildTrainHandler { // 任务 if (isSuccess) { await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_TRAIN_SUCESS, 1, true, {}); - await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.GUILD_TRAIN_COUNT, 1, { trainId: trainId }) } await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_TRAIN, 1, true, {}); //成长任务 diff --git a/game-server/app/servers/chat/remote/guildRemote.ts b/game-server/app/servers/chat/remote/guildRemote.ts index 0fe915299..327df2816 100644 --- a/game-server/app/servers/chat/remote/guildRemote.ts +++ b/game-server/app/servers/chat/remote/guildRemote.ts @@ -34,6 +34,7 @@ export class GuildRemote { private GUILD_CITY_ACT_HP = 'onGuildCityGateHpUpdate'; // 诸侯入侵城门血条 private GUILD_RACE_UPDATE = 'onRaceHorseUpdate'; /// 更新木牛流马 private GUILD_RACE_EVENT = 'onRaceEventUpdate'; /// 更新木牛流马 + private GUILD_POP_UP_ACTIVITY = 'onActivityUpdate'; /// 向军团成员发送弹窗礼包 /** * 封装,军团相关channel名: 'guild'+guildCode @@ -54,15 +55,15 @@ export class GuildRemote { * @param message 推送信息 * @param sid 玩家服 */ - private pushMessageByUids(guildCode: string, path: string, roleId: string, message: {code: string, roleId?: string}, sid?: string) { + private pushMessageByUids(guildCode: string, path: string, roleId: string, message: { code: string, roleId?: string }, sid?: string) { let channel = this.getChannel(guildCode); let uids = []; - if(!sid) { + if (!sid) { sid = channel && channel.getMember(roleId)['sid']; } - if(sid) { - uids.push({roleId, sid}); + if (sid) { + uids.push({ roleId, sid }); this.channelService.pushMessageByUids(path, resResult(STATUS.SUCCESS, message), uids); } return channel @@ -76,12 +77,12 @@ export class GuildRemote { */ private pushMessage(guildCode: string, path: string, message: any) { let channel = this.getChannel(guildCode); - if(!!channel) { + if (!!channel) { channel.pushMessage(path, resResult(STATUS.SUCCESS, message)); } return channel } - + /** * 诸侯混战,按城池区分channel * @param cityId 城池id @@ -101,7 +102,7 @@ export class GuildRemote { */ private pushMessageToCity(cityId: number, path: string, message: any) { let channel = this.getCityChannel(cityId); - if(!!channel) { + if (!!channel) { channel.pushMessage(path, resResult(STATUS.SUCCESS, message)); } return channel @@ -114,7 +115,7 @@ export class GuildRemote { * @param guild 军团信息 * @param sid 玩家sid */ - public memberQuit (guildCode: string, roleId: string, guild: GuildType, sid?: string) { + public memberQuit(guildCode: string, roleId: string, guild: GuildType, sid?: string) { // 被踢出公会 this.pushMessageByUids(guildCode, this.MEMBER_QUIT, roleId, { code: guildCode, @@ -130,8 +131,8 @@ export class GuildRemote { * @param guildCode 军团code */ public dismiss(guildCode: string) { - let channel = this.pushMessage(guildCode, this.DISMISS, {code: guildCode}); - if(!!channel) { + let channel = this.pushMessage(guildCode, this.DISMISS, { code: guildCode }); + if (!!channel) { channel.destroy(); } } @@ -141,7 +142,7 @@ export class GuildRemote { * @param guildCode 军团code * @param info 军团相关信息 */ - public updateInfo (guildCode: string, info: any) { + public updateInfo(guildCode: string, info: any) { this.pushMessage(guildCode, this.GUILD_INFO_UPDATE, info); } @@ -152,9 +153,9 @@ export class GuildRemote { * @param newLeader 新的团长 * @param oldLeaderId 旧团长 */ - public changeLeader (guildCode: string, managerCnt: number, newLeader: RoleType, oldLeaderId: string) { + public changeLeader(guildCode: string, managerCnt: number, newLeader: RoleType, oldLeaderId: string) { let { roleId, roleName, frame, head, spine, lv, quitTime } = newLeader; - this.updateInfo(guildCode, {managerCnt, leader: { roleId, roleName, frame, head, spine, lv, quitTime }}); + this.updateInfo(guildCode, { managerCnt, leader: { roleId, roleName, frame, head, spine, lv, quitTime } }); this.demotion(guildCode, oldLeaderId); this.promotion(guildCode, roleId); } @@ -164,7 +165,7 @@ export class GuildRemote { * @param guildCode 军团code * @param roleId 旧团长id */ - public demotion (guildCode: string, roleId: string) { + public demotion(guildCode: string, roleId: string) { this.pushMessageByUids(guildCode, this.DEMOTION, roleId, { code: guildCode }); @@ -175,7 +176,7 @@ export class GuildRemote { * @param guildCode 军团code * @param roleId 新团长id */ - public promotion (guildCode: string, roleId: string) { + public promotion(guildCode: string, roleId: string) { this.pushMessageByUids(guildCode, this.PROMOTION, roleId, { code: guildCode }); @@ -185,9 +186,9 @@ export class GuildRemote { * 添加动态 * @param guildRecType 动态 */ - public addRec (guildRecType: GuildRecType) { + public addRec(guildRecType: GuildRecType) { let { guildCode, type, params, createTime } = guildRecType; - this.pushMessage(guildCode, this.GUILD_REC_ADD, {type, params, createTime}); + this.pushMessage(guildCode, this.GUILD_REC_ADD, { type, params, createTime }); } /** @@ -229,7 +230,7 @@ export class GuildRemote { * @param declareGuildCode 宣战的军团code * @param declareCount 宣战数量 */ - public async sendGuildCityDeclare(cityId: number, declareGuildCode: string, declareCount: number ) { + public async sendGuildCityDeclare(cityId: number, declareGuildCode: string, declareCount: number) { this.pushMessageToCity(cityId, this.GUILD_CITY_DECLARE, { cityId, declareGuildCode, @@ -242,7 +243,7 @@ export class GuildRemote { * @param cityId 城池 * @param gateHp 血条 */ - public async pushCityGateHp(cityId: number, gateHp: number ) { + public async pushCityGateHp(cityId: number, gateHp: number) { this.pushMessageToCity(cityId, this.GUILD_CITY_ACT_HP, { cityId, gateHp @@ -255,7 +256,7 @@ export class GuildRemote { * @param woodenHorseList 木马 * @param ranks 军团排名和自己所在的排名 */ - public async pushRaceHorseUpdate(guildCode: string, woodenHorseList: WoodenHorse[], ranks: GuildRankParams, events: Event[] ) { + public async pushRaceHorseUpdate(guildCode: string, woodenHorseList: WoodenHorse[], ranks: GuildRankParams, events: Event[]) { this.pushMessage(guildCode, this.GUILD_RACE_UPDATE, { timestamp: Date.now(), woodenHorseList, @@ -282,4 +283,13 @@ export class GuildRemote { public async pushBossOpen(guildCode: string, warId: number, bossHp: number, status: number) { this.pushMessage(guildCode, this.GUILD_BOSS_OPEN, { guildCode, warId, bossHp, status }); } + + /** + * @description 向军团推送弹窗礼包数据活动 + * @param guildCode + */ + public async sendPopUpActivity(guildCode: string, data: any[]) { + console.log("sendPopUpActivity") + this.pushMessage(guildCode, this.GUILD_POP_UP_ACTIVITY, data); + } } \ No newline at end of file diff --git a/game-server/app/services/guildActivityService.ts b/game-server/app/services/guildActivityService.ts index cb4d3f641..ab2f86b3a 100644 --- a/game-server/app/services/guildActivityService.ts +++ b/game-server/app/services/guildActivityService.ts @@ -26,21 +26,21 @@ let gateActivityObj: GateActivityObject; let cityActivityObj: CityActivityObject; let raceActivityObj: RaceActivityObject; export function getGateActivityObj() { - if(!gateActivityObj) { + if (!gateActivityObj) { gateActivityObj = new GateActivityObject(); } return gateActivityObj; } export function getCityActivityObj() { - if(!cityActivityObj) { + if (!cityActivityObj) { cityActivityObj = new CityActivityObject(); } return cityActivityObj; } export function getRaceActivityObj() { - if(!raceActivityObj) { + if (!raceActivityObj) { raceActivityObj = new RaceActivityObject(); } return raceActivityObj; @@ -52,10 +52,10 @@ export function getRaceActivityObj() { export async function setMedianCe() { let servers = await ServerlistModel.getAllServerList(); - for(let server of servers) { - if(server.serverType == 'official') { + for (let server of servers) { + if (server.serverType == 'official') { let medianRole = await RoleModel.getMedianRole(server.id); - if(!medianRole) { + if (!medianRole) { await ServerlistModel.updateByServerId(server.id, { medianCe: GUILDACTIVITY.GATEACTIVITY_ENEMYCE }); } else { let { topLineup } = medianRole; @@ -75,7 +75,7 @@ export async function setMedianCe() { */ export async function getMedianCe(serverId: number) { let server = await ServerlistModel.findByServerId(serverId); - if(server) { + if (server) { return server.medianCe; } return GUILDACTIVITY.GATEACTIVITY_ENEMYCE; @@ -87,7 +87,7 @@ export async function getMedianCe(serverId: number) { */ export function getGuildActivityStatus(id: number) { let dicGuildActivity = gameData.guildActivity.get(id); - if(!dicGuildActivity) return false; + if (!dicGuildActivity) return false; return getGuildActivityByDic(dicGuildActivity); } @@ -100,7 +100,7 @@ export function getGuildActivityByDic(dicGuildActivity: DicGuildActivity) { let status = 0, time = 0; let now = nowSeconds(); - if(now >= countdownTime && now < startTime) { + if (now >= countdownTime && now < startTime) { status = GUILD_ACTIVITY_STATUS.WAITING; time = startTime - now; } else if (now >= startTime && now < endTime) { @@ -126,27 +126,27 @@ export function getGuildActivityByDic(dicGuildActivity: DicGuildActivity) { */ export function getRecordScore(aid: number, round: number, record: { round: number, dataId: number }[], memberRecord: GateMembersRec) { let dicGuildActivity = gameData.guildActivity.get(aid); - if(!dicGuildActivity) return false; + if (!dicGuildActivity) return false; let dicWarJson = gameData.warJson.get(dicGuildActivity.warid); - if(!dicWarJson) return false; + if (!dicWarJson) return false; - let { round: curRound, enemies: historyEnemies} = memberRecord; + let { round: curRound, enemies: historyEnemies } = memberRecord; let sum = 0, newRecords = new Array(); - for(let {round, dataId} of record) { - if(!historyEnemies.includes(dataId)) { + for (let { round, dataId } of record) { + if (!historyEnemies.includes(dataId)) { let enemy = dicWarJson.find(cur => cur.dataId == dataId); let enemyType = enemy.enemyType; let score = gameData.gateActivityPoint.get(enemyType); - newRecords.push({ round, dataId, score, enemyType}); + newRecords.push({ round, dataId, score, enemyType }); sum += score; - historyEnemies.push(dataId); + historyEnemies.push(dataId); } } - for(let i = curRound + 1; i <= round; i++) { + for (let i = curRound + 1; i <= round; i++) { sum += gameData.gateActivityPoint.get(GET_POINT_WAYS.ROUND_START); memberRecord.round = i; } @@ -158,15 +158,15 @@ export async function getGateActivityRank(guildCode: string, serverId: number, r let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId }, true); r.setGenerFieldsFun(generGuildActivityRankField); - let { ranks: guildRank, myRank: myGuildRank } = await r.getRankListWithMyRank({guildCode}); - if(!myGuildRank) { + let { ranks: guildRank, myRank: myGuildRank } = await r.getRankListWithMyRank({ guildCode }); + if (!myGuildRank) { myGuildRank = await r.generMyRankWithGuild(guildCode, 0, 0); } let myR = new Rank(REDIS_KEY.USER_GATE_ACTIVITY, { serverId, guildCode }); myR.setGenerFieldsFun(generGuildActivityMemberRankField); - let { ranks: memberRank, myRank: myMemberRank } = await r.getRankListWithMyRank({roleId}); - if(roleName && !myMemberRank) { + let { ranks: memberRank, myRank: myMemberRank } = await r.getRankListWithMyRank({ roleId }); + if (roleName && !myMemberRank) { myMemberRank = await r.generMyRankWithRole(roleId, 0, 0); } @@ -177,15 +177,15 @@ export async function getCityActivityRank(guildCode: string, serverId: number, c let r = new Rank(REDIS_KEY.CITY_ACTIVITY, { serverId, cityId }, true); r.setGenerFieldsFun(generGuildActivityRankField); - let { ranks: guildRank, myRank: myGuildRank } = await r.getRankListWithMyRank({guildCode}); - if(!myGuildRank) { + let { ranks: guildRank, myRank: myGuildRank } = await r.getRankListWithMyRank({ guildCode }); + if (!myGuildRank) { myGuildRank = await r.generMyRankWithGuild(guildCode, 0, 0); } let myR = new Rank(REDIS_KEY.USER_CITY_ACTIVITY, { serverId, guildCode }); myR.setGenerFieldsFun(generGuildActivityMemberRankField); - let { ranks: memberRank, myRank: myMemberRank } = await r.getRankListWithMyRank({roleId}); - if(roleName && !myMemberRank) { + let { ranks: memberRank, myRank: myMemberRank } = await r.getRankListWithMyRank({ roleId }); + if (roleName && !myMemberRank) { myMemberRank = await r.generMyRankWithRole(roleId, 0, 0); } @@ -195,8 +195,8 @@ export async function getCityActivityRank(guildCode: string, serverId: number, c export async function getRaceActivityRank(guildCode: string, serverId: number) { let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId }, true); r.setGenerFieldsFun(generField); - let { myRank, ranks } = await r.getRankListWithMyRank({guildCode}); - if(!myRank) { + let { myRank, ranks } = await r.getRankListWithMyRank({ guildCode }); + if (!myRank) { myRank = await r.generMyRankWithGuild(guildCode, 0, 0); } @@ -206,7 +206,7 @@ export async function getRaceActivityRank(guildCode: string, serverId: number) { function generField(params: GuildRankInfo) { let { rank, code, name, num, time } = params; - let param = new SimpleGuildRankWithTimeParam(rank, code, name, { distance: num/1000, time: time * 1000, startTime: 0, durability: 0 }); + let param = new SimpleGuildRankWithTimeParam(rank, code, name, { distance: num / 1000, time: time * 1000, startTime: 0, durability: 0 }); return param; } @@ -217,16 +217,16 @@ function generField(params: GuildRankInfo) { */ export async function getWoodenHorseList(guildCode: string, serverId: number) { let obj = getRaceActivityObj(); - let r = new Rank(REDIS_KEY.RACE_ACTIVITY, {serverId}, true, 5); + let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId }, true, 5); - let myRank = await r.getMyRank({guildCode}); - let startRank = myRank - 2 > 0? myRank - 2: 1; + let myRank = await r.getMyRank({ guildCode }); + let startRank = myRank - 2 > 0 ? myRank - 2 : 1; let endRank = startRank + 4; - let range = await r.getRankByRange(startRank, endRank); + let range = await r.getRankByRange(startRank, endRank); let woodenHorseList = new Array(); - for(let { code } of range) { + for (let { code } of range) { let woodenHorse = await obj.getWoodenHorse(code, serverId); - if(woodenHorse) { + if (woodenHorse) { woodenHorseList.push(woodenHorse); } } @@ -248,13 +248,13 @@ function generGuildActivityMemberRankField(param: RoleRankInfo) { * @param aid 活动类型 */ export async function sendAllGuildRanks(aid: number) { - if(aid == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) { + if (aid == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) { let obj = getGateActivityObj(); let guilds = obj.getGuilds(); - for(let [ serverId, guildCodes ] of guilds) { + for (let [serverId, guildCodes] of guilds) { // TODO 不需要每个军团都排序一次 - for(let guildCode of guildCodes) { - let ranks = await getGateActivityRank(guildCode, serverId); + for (let guildCode of guildCodes) { + let ranks = await getGateActivityRank(guildCode, serverId); let chatSid = await getGuildChannelSid(guildCode); pinus.app.rpc.chat.guildRemote.pushRank.toServer(chatSid, guildCode, ranks); } @@ -263,8 +263,8 @@ export async function sendAllGuildRanks(aid: number) { let obj = getCityActivityObj(); let { cities } = obj.getAllCities(); // console.log(JSON.stringify(cities)); - for(let { serverId, cityId, guildCodes } of cities) { - for(let guildCode of guildCodes) { + for (let { serverId, cityId, guildCodes } of cities) { + for (let guildCode of guildCodes) { let ranks = await getCityActivityRank(guildCode, serverId, cityId); let chatSid = await getGuildChannelSid(guildCode); pinus.app.rpc.chat.guildRemote.pushCityActRank.toServer(chatSid, guildCode, ranks); @@ -279,11 +279,11 @@ export async function sendAllGuildRanks(aid: number) { */ export async function sendGuildActEndMsg(aid: number) { - if(aid == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) { + if (aid == GUILD_ACTIVITY_TYPE.GATE_ACTIVITY) { let obj = getGateActivityObj(); let guilds = obj.getGuilds(); - for(let [ serverId, guildCodes ] of guilds) { - for(let guildCode of guildCodes) { + for (let [serverId, guildCodes] of guilds) { + for (let guildCode of guildCodes) { await gateActivitySettleReward(guildCode, serverId); } } @@ -291,16 +291,16 @@ export async function sendGuildActEndMsg(aid: number) { } else if (aid == GUILD_ACTIVITY_TYPE.CITY_ACTIVITY) { let obj = getCityActivityObj(); let { cities } = obj.getAllCities(); - for(let { serverId, cityId } of cities) { + for (let { serverId, cityId } of cities) { await cityActivitySettleReward(cityId, serverId); } cityActivityObj = new CityActivityObject(); } else if (aid == GUILD_ACTIVITY_TYPE.RACE_ACTIVITY) { let obj = getRaceActivityObj(); - for(let {guildCode, serverId} of obj.guildList) { + for (let { guildCode, serverId } of obj.guildList) { let woodenHorse = await obj.getWoodenHorse(guildCode, serverId); - if(woodenHorse && woodenHorse.status != 0) { + if (woodenHorse && woodenHorse.status != 0) { await raceActivitySettleReward(guildCode, woodenHorse); } } @@ -310,8 +310,8 @@ export async function sendGuildActEndMsg(aid: number) { // 全服发送结束新号 export async function sendEndMsgToAll() { - let serverlist = await getAllServers(); - for(let serverId of serverlist) { + let serverlist = await getAllServers(); + for (let serverId of serverlist) { let chatSid = await getWorldChannelSid(serverId); pinus.app.rpc.chat.chatRemote.sendGuildActivityEnd.toServer(chatSid, serverId); } @@ -336,7 +336,7 @@ export async function sendSingleCityActEndMsg(cityId: number, serverId: number) let chatSid = await getCityChannelSid(cityId); let obj = getCityActivityObj(); let guildCodes = obj.getGuildsInCity(serverId, cityId); - for(let guildCode of guildCodes) { + for (let guildCode of guildCodes) { pinus.app.rpc.chat.guildRemote.sendGuildActivityEnd.toServer(chatSid, guildCode); } await cityActivitySettleReward(cityId, serverId); @@ -364,14 +364,14 @@ export async function gateActivitySettleReward(guildCode: string, serverId: numb let { gateHp, members } = obj.getObj(guildCode, serverId); let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId }, true); - let rank = await r.getMyRank({guildCode}); - let guildScore = await r.getMyScore({guildCode}); + let rank = await r.getMyRank({ guildCode }); + let guildScore = await r.getMyScore({ guildCode }); let rewards = getGuildAuctionRewards(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY, rank); - let rec = await GuildActivityRecordModel.updateInfo(guildCode, { - isSuccess: gateHp > 0, - isCompleted: true, + let rec = await GuildActivityRecordModel.updateInfo(guildCode, { + isSuccess: gateHp > 0, + isCompleted: true, rank, score: guildScore, remainGateHp: gateHp, members, memberCnt: members.length, auctionType: AUCTION_SOURCE.GATE, @@ -382,12 +382,12 @@ export async function gateActivitySettleReward(guildCode: string, serverId: numb let myR = new Rank(REDIS_KEY.USER_GATE_ACTIVITY, { serverId, guildCode }); - let ranks = await myR.getRankByRange(); - for(let { rank, roleId, num: myScore } of ranks) { + let ranks = await myR.getRankByRange(); + for (let { rank, roleId, num: myScore } of ranks) { let honour = dic.honour + myScore * GUILDACTIVITY.GATEACTIVITY_HONOUR_RATIO; await updateUserRecAndSendHonour(honour, myScore, rank, roleId, members); } - for(let { roleId } of members) { // 只参加了,没有分数的人 + for (let { roleId } of members) { // 只参加了,没有分数的人 await updateUserRecAndSendHonour(dic.honour, 0, 0, roleId, members); } @@ -416,15 +416,15 @@ export async function cityActivitySettleReward(cityId: number, serverId: number) let obj = getCityActivityObj(); let dicCity = gameData.cityActivity.get(cityId); - if(!dicCity) return; + if (!dicCity) return; let gateHp = obj.getGateHpAndInc(serverId, cityId, dicCity.hp); let isSuccess = gateHp <= 0; // 血条未击破则没有占领军团 - + let r = new Rank(REDIS_KEY.CITY_ACTIVITY, { serverId, cityId }, true); - let ranks = await r.getRankByRange(); - for(let { rank: guildRank, code: guildCode, name, num } of ranks) { - if(guildRank == 1) { - if(isSuccess) { + let ranks = await r.getRankByRange(); + for (let { rank: guildRank, code: guildCode, name, num } of ranks) { + if (guildRank == 1) { + if (isSuccess) { await GuildActivityCityModel.guard(serverId, cityId, guildCode, name); // 占领 } else { await GuildActivityCityModel.guard(serverId, cityId, "", ""); // 无人能占领 @@ -446,14 +446,14 @@ export async function cityActivitySettleReward(cityId: number, serverId: number) let dic = gameData.guildActivity.get(GUILD_ACTIVITY_TYPE.CITY_ACTIVITY); let myR = new Rank(REDIS_KEY.USER_GATE_ACTIVITY, { serverId, guildCode }); - let ranks = await myR.getRankByRange(); + let ranks = await myR.getRankByRange(); let userRank = 0; - for(let { rank, roleId, num: myScore } of ranks) { + for (let { rank, roleId, num: myScore } of ranks) { let honour = dic.honour + getCityActivityRewards(dicCity.type, guildRank, rank); await updateUserRecAndSendHonour(honour, myScore, rank, roleId, members); userRank = rank; } - for(let { roleId } of members) { // 只参加了,没有分数的人 + for (let { roleId } of members) { // 只参加了,没有分数的人 let honour = dic.honour + getCityActivityRewards(dicCity.type, guildRank, userRank); await updateUserRecAndSendHonour(honour, 0, 0, roleId, members); } @@ -488,18 +488,18 @@ export async function autoDeclare(serverId: number) { * @param sourceCode 活动唯一code */ export async function participants(guildCode: string, sourceType: number, sourceCode: string) { - if(sourceType == AUCTION_SOURCE.BOSS) { + if (sourceType == AUCTION_SOURCE.BOSS) { let rec = await BossInstanceModel.findBySourceCode(guildCode, sourceCode); - if(!rec) return []; + if (!rec) return []; return rec.ranks.map(cur => { return { roleId: cur.roleId, job: cur.job } }); } else { let rec = await GuildActivityRecordModel.findBySourceCode(guildCode, sourceType, sourceCode); - if(!rec) return []; - - return rec.members||[]; + if (!rec) return []; + + return rec.members || []; } } @@ -511,14 +511,14 @@ export async function participants(guildCode: string, sourceType: number, source export function getCities(guildCode: string, dbCities: GuildActivityCityType[]) { let cities = new Array(); - for(let [ cityId, dic ] of gameData.cityActivity) { + for (let [cityId, dic] of gameData.cityActivity) { let param = new CityParam(cityId); let curCity = dbCities.find(cur => cur.cityId == cityId); - if(curCity) { - param.guardGuildCode = curCity.guardGuildCode||""; - param.guardGuildName = curCity.guardGuildName||""; - param.declareCount = curCity.declareCount||0; + if (curCity) { + param.guardGuildCode = curCity.guardGuildCode || ""; + param.guardGuildName = curCity.guardGuildName || ""; + param.declareCount = curCity.declareCount || 0; } param.status = getCityStatus(guildCode, cityId, dic, dbCities); @@ -539,22 +539,22 @@ export function getCityStatus(guildCode: string, cityId: number, dic: DicCityAct let d = getCurDay(true); let { week, preCity } = dic; let activityStatus = getGuildActivityStatus(GUILD_ACTIVITY_TYPE.CITY_ACTIVITY); - if(!activityStatus) { + if (!activityStatus) { return CITY_STATUS.NOT_OPEN } - + let dicGuildActivity = gameData.guildActivity.get(GUILD_ACTIVITY_TYPE.CITY_ACTIVITY); let { openDay } = dicGuildActivity; let curIndex = openDay.indexOf(week[0]); - let startDay = openDay[curIndex - 1]||0; - let endDay = openDay[openDay.length - 1]||0; - if(d >= startDay && d <= endDay) status = CITY_STATUS.CAN_DECLARE; - if(d == startDay && activityStatus.status != GUILD_ACTIVITY_STATUS.END) status = CITY_STATUS.NOT_OPEN; - if(d == endDay && activityStatus.status == GUILD_ACTIVITY_STATUS.END) status = CITY_STATUS.NOT_OPEN; + let startDay = openDay[curIndex - 1] || 0; + let endDay = openDay[openDay.length - 1] || 0; + if (d >= startDay && d <= endDay) status = CITY_STATUS.CAN_DECLARE; + if (d == startDay && activityStatus.status != GUILD_ACTIVITY_STATUS.END) status = CITY_STATUS.NOT_OPEN; + if (d == endDay && activityStatus.status == GUILD_ACTIVITY_STATUS.END) status = CITY_STATUS.NOT_OPEN; let curCity = dbCities.find(cur => cur.cityId == cityId); - if(curCity) { - if(curCity.guardGuildCode == guildCode) { + if (curCity) { + if (curCity.guardGuildCode == guildCode) { status = CITY_STATUS.GUARD; } else if (curCity.declareGuilds.includes(guildCode)) { status = CITY_STATUS.DECLARED; @@ -590,39 +590,39 @@ export async function calWoodenHorseAndSend(serverId: number) { } let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId }, true); r.setGenerFieldsFun(fun); - let ranks = await r.getRankByRange(); + let ranks = await r.getRankByRange(); let map = new Map(); let guildRank = new Array(); - let l = ranks.length > 10?10: ranks.length; - for(let i = 0; i < l; i++) { - let { rank, code, name, num } = ranks[i] + let l = ranks.length > 10 ? 10 : ranks.length; + for (let i = 0; i < l; i++) { + let { rank, code, name, num } = ranks[i] let _obj = await obj.getWoodenHorse(code, serverId); let param = new SimpleGuildRankWithTimeParam(rank, code, name, _obj); guildRank.push(param); } // 找到往前和往后2艘船 - for(let i = 0; i < ranks.length; i++) { + for (let i = 0; i < ranks.length; i++) { let { code } = ranks[i]; - for(let j = i; j <= i + 2; j++) { - if(j <= ranks.length - 1 && !map.has(j)) { + for (let j = i; j <= i + 2; j++) { + if (j <= ranks.length - 1 && !map.has(j)) { map.set(j, new Array()); } } - for(let [rank, woodenHorseList] of map) { + for (let [rank, woodenHorseList] of map) { let limit = 5; - if(rank - 2 < 0) limit += rank - 2; - if(rank + 2 > ranks.length - 1) limit -= (rank + 2) - (ranks.length - 1); + if (rank - 2 < 0) limit += rank - 2; + if (rank + 2 > ranks.length - 1) limit -= (rank + 2) - (ranks.length - 1); let woodenHorse = await obj.getWoodenHorse(code, serverId); - if(!!woodenHorse) { + if (!!woodenHorse) { map.get(rank).push(woodenHorse); } else { - limit --; // 理论上不能出现没有woodenHorse的情况,但是如果出现了,以防无返回 + limit--; // 理论上不能出现没有woodenHorse的情况,但是如果出现了,以防无返回 } let len = map.get(rank).length; - if( len >= limit) { + if (len >= limit) { // 发送 // console.log('send', woodenHorseList.length); let curRank = ranks[rank]; @@ -630,7 +630,7 @@ export async function calWoodenHorseAndSend(serverId: number) { let myGuildRank = new SimpleGuildRankWithTimeParam(curRank.rank, curRank.code, curRank.name, wh); let chatSid = await getGuildChannelSid(curRank.code); - let events = obj.getEvents(curRank.code, wh?wh.distance:0); + let events = obj.getEvents(curRank.code, wh ? wh.distance : 0); pinus.app.rpc.chat.guildRemote.pushRaceHorseUpdate.toServer(chatSid, curRank.code, woodenHorseList, { guildRank, myGuildRank }, events); map.delete(rank); @@ -638,7 +638,7 @@ export async function calWoodenHorseAndSend(serverId: number) { } } - return ; + return; } /** @@ -647,7 +647,7 @@ export async function calWoodenHorseAndSend(serverId: number) { export async function sendRaceStartMsg(serverId: number) { let obj = getRaceActivityObj(); obj.startRace(); // 设置开启活动 - + let chatSid = await getWorldChannelSid(serverId); pinus.app.rpc.chat.chatRemote.sendRaceActivityStart.toServer(chatSid, serverId); await calWoodenHorseAndSend(serverId); @@ -665,27 +665,36 @@ export async function raceActivitySettleReward(guildCode: string, woodenHorse: W // 计算排名,计算耐久,发送奖励 let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId }, true); let isSuccess = distance >= GUILDACTIVITY.RACEACTIVITY_LENGTH; // 血条未击破则没有占领军团 - let myGuildRank = await r.getMyRank({guildCode}); + let myGuildRank = await r.getMyRank({ guildCode }); let members = obj.getMembersOfGuild(guildCode); let rewards = getGuildAuctionRewards(GUILD_ACTIVITY_TYPE.RACE_ACTIVITY, myGuildRank); - let rec = await GuildActivityRecordModel.updateInfo(guildCode, { + let rec = await GuildActivityRecordModel.updateInfo(guildCode, { memberCnt: members.length, members, isSuccess, isCompleted: true, rank: myGuildRank, rewards, - woodenHorse, + woodenHorse, }); - if(rec) { + if (rec) { // 奖励加入拍卖行 await genAuction(guildCode, AUCTION_SOURCE.GATE, rec.code, serverId, rewards); - + let dic = gameData.guildActivity.get(GUILD_ACTIVITY_TYPE.RACE_ACTIVITY); let honour = dic.honour + Math.floor(durability * GUILDACTIVITY.RACEACTIVITY_DURABILITY_REWARD); - for(let { roleId } of members) { + for (let { roleId } of members) { await updateUserRecAndSendHonour(honour, 0, myGuildRank, roleId, members); } } // 删除数据 obj.deleteFromList(guildCode); +} + +/** + * 军团练兵场通关层数后全团发送弹窗礼包 + * @param guildCode 军团code + */ +export async function sendPopUpActivityData(guildCode: string, serverId: number, data: any[]) { + let chatSid = await getGuildChannelSid(guildCode); + pinus.app.rpc.chat.guildRemote.sendPopUpActivity.toServer(chatSid, guildCode, data); } \ No newline at end of file diff --git a/game-server/app/services/taskService.ts b/game-server/app/services/taskService.ts index cdcb7ca2a..86f426bc0 100644 --- a/game-server/app/services/taskService.ts +++ b/game-server/app/services/taskService.ts @@ -77,6 +77,7 @@ export async function pushTaskUpdate(roleId: string, sid: string, funcs: number[ export async function checkActivityTask(serverId: number, sid: string, funcs: number[], roleId: string, taskType: TASK_TYPE, count: number, parma?: any) { let pushMessage = await taskUtil.accomplishTask(serverId, roleId, taskType, count, parma); pushActivityUpdate(roleId, sid, funcs, pushMessage); + return pushMessage; } export async function pushActivityUpdate(roleId: string, sid: string, funcs: number[], pushMessage: any[]) { diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index f76b64967..ede17deb2 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -630,7 +630,7 @@ export enum TASK_TYPE { HERO_WAKE_UP_STAR_UP_COUNT = 76, // *名武将升至觉醒*星 EQUIP_REFINE_LV = 77, // *件装备成功精炼到*级 EQUIP_SUIT_JEWEL_STAGE = 78, // *次触发,一个武将满装备情况下,必须都镶嵌有相同阶的宝石(阶数大于等于x情况下都算达成) - GUILD_TRAIN_COUNT = 79, // 练兵场通关x关x次 + GUILD_TRAIN_COUNT = 79, // 练兵场通关x层 HERO_UNLOCK = 80, // 名将谱x阵营全部激活 GACHA_QUALITY_COUNT = 81, // 抽到*次品质*武将 ROLE_TERAPH_STAGE_UP = 82, // 神像进阶 diff --git a/shared/db/ActivityPopUpShop.ts b/shared/db/ActivityPopUpShop.ts index 06e4e58ea..cfe8376c2 100644 --- a/shared/db/ActivityPopUpShop.ts +++ b/shared/db/ActivityPopUpShop.ts @@ -100,12 +100,22 @@ export default class Activity_Pop_Up_Shop extends BaseModel { } //添加数据并标记push消息 - public static async addTaskPushMessage(serverId: number, activityId: number, roleId: string, id: number, type: number, addCount: number, beginTime: Date, endTime: Date) { - let result: ActivityPopUpShopModelType = await ActivityPopUpShopModel.findOneAndUpdate({ serverId, roleId, activityId, id, type, addCount, beginTime, endTime }, + public static async addTaskPushMessage(serverId: number, activityId: number, roleId: string, id: number, type: number, totalCount: number, beginTime: Date, endTime: Date) { + let result: ActivityPopUpShopModelType = await ActivityPopUpShopModel.findOneAndUpdate({ serverId, roleId, activityId, id, type, totalCount, beginTime, endTime }, { $set: { isPush: true } }, { upsert: true, new: true }).lean(true); return result; } + //添加数据并标记push消息 + public static async addTaskArrayPushMessage(serverId: number, activityId: number, roleIds: string[], id: number, type: number, totalCount: number, beginTime: Date, endTime: Date) { + let activityData = []; + for (let roleId of roleIds) { + activityData.push( + { serverId, roleId, activityId, id, type, totalCount, beginTime, endTime, isPush: true, buyCount: 0, data: JSON.stringify({ totalCount }) } + ) + } + await ActivityPopUpShopModel.insertMany(activityData); + } //删除活动领取记录 public static async deleteActivity(serverId: number, activityId: number, roleId: string, id: number) { diff --git a/shared/db/ActivityThirtyDays.ts b/shared/db/ActivityThirtyDays.ts index f7218628d..f1b3f8ebb 100644 --- a/shared/db/ActivityThirtyDays.ts +++ b/shared/db/ActivityThirtyDays.ts @@ -47,8 +47,8 @@ export default class Activity_Thirty_Days extends BaseModel { } //根据活动记录统计数据 - public static async addTaskRecord(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, tab: number, type: number, data: string,) { - let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex, tab, type }, + public static async addTaskRecord(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, type: number, data: string,) { + let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab, type }, { $set: { data: data } }, { upsert: true, new: true }).lean(true); return result; } diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index a7e354e84..657d8c02f 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -1,6 +1,6 @@ import { gameData } from './data'; import { DicTask } from './dictionary/DicTask'; -import { TASK_TYPE, ABI_STAGE, WAR_TYPE, GUILD_JOB, TASK_FUN_TYPE, FUNCS_ID } from '../consts'; +import { TASK_TYPE, ABI_STAGE, WAR_TYPE, GUILD_JOB, TASK_FUN_TYPE, FUNCS_ID, STATUS } from '../consts'; import { UserTaskRecModel, UserTaskRecType } from '../db/UserTaskRec' import { RoleType, RoleModel } from '../db/Role'; import { TaskParam, TaskListReturn } from '../domain/roleField/task'; @@ -8,9 +8,8 @@ import { getZeroPoint } from './timeUtil'; import { HeroType } from '../db/Hero'; import { EquipType, EquipModel } from '../db/Equip'; import { ItemInter } from './interface'; -import { GrowthData } from '../domain/activityField/growthField'; import { DailyChallengesData } from '../domain/activityField/dailyChallengesField'; -import { splitString } from './util'; +import { resResult, splitString } from './util'; import { ActivityModel, ActivityModelType } from '../db/Activity'; import { ACTIVITY_TYPE } from '../consts/constModules/activityConst'; import { ActivityGrowthModel } from '../db/ActivityGrowth'; @@ -26,6 +25,7 @@ import { ActivityPopUpShopModel } from '../db/ActivityPopUpShop'; import { ActivityPopUpShopRecordModel, ActivityPopUpShopRecordModelType } from '../db/ActivityPopUpShopRecord'; import { SevenDaysData } from '../domain/activityField/sevenDaysField'; import moment = require("moment"); +import { GuildModel } from '../db/Guild'; @@ -721,6 +721,19 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: } else { await ActivityPopUpShopRecordModel.addRecord(serverId, activity.activityId, roleId, task.id, task.taskType, recordDate, addCount) } + } else if (taskType == TASK_TYPE.GUILD_TRAIN_COUNT) {//军团练兵场通关层数推送所有团员 + if (task.taskParam[0] == parma.trainId) { + let playerRecord = await ActivityPopUpShopModel.addTaskPushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, count, beginTime, endTime); + popShopData.setPlayerRecords(playerRecord) + pushMessage = pushMessage.concat(popShopData); + + //全服推送 + let code = parma.code; + const guildData = await GuildModel.findByCode(code, serverId, 'members'); + let members = guildData.members.filter(member => { return member != roleId }) + await ActivityPopUpShopModel.addTaskArrayPushMessage(serverId, activity.activityId, members, task.id, task.taskType, count, beginTime, endTime); + + } } else { let taskRecord = await ActivityPopUpShopModel.findDataByTaskId(serverId, activity.activityId, roleId, popShopData.id, popShopData.taskType) let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null @@ -1016,9 +1029,9 @@ export function isComplete(roleId: string, taskType: TASK_TYPE, taskParam: strin addCount = count; break; } - case TASK_TYPE.GUILD_TRAIN_COUNT://trainId count&wardId& + case TASK_TYPE.GUILD_TRAIN_COUNT://trainId trainId& { - if (paramObj.trainId == param[1]) { + if (paramObj.trainId == param[0]) { addCount = count; } break; diff --git a/shared/resource/jsons/dic_zyz_taskType.json b/shared/resource/jsons/dic_zyz_taskType.json index 0a6ca1db8..0242c6ca2 100644 --- a/shared/resource/jsons/dic_zyz_taskType.json +++ b/shared/resource/jsons/dic_zyz_taskType.json @@ -704,9 +704,9 @@ { "id": 79, "name": "军团", - "info": "练兵场通关x关x次", - "param": "count&wardId&", - "string": "发生次数&关卡Id&", + "info": "练兵场通关x层", + "param": "trainId&", + "string": "练兵场层trainId&", "content": 0, "condition": "count" },