diff --git a/game-server/app/servers/chat/remote/chatRemote.ts b/game-server/app/servers/chat/remote/chatRemote.ts index b790b44df..c5e7b7b3d 100644 --- a/game-server/app/servers/chat/remote/chatRemote.ts +++ b/game-server/app/servers/chat/remote/chatRemote.ts @@ -1,11 +1,11 @@ import { GroupMessageType } from './../../../db/GroupMessage'; import { Application, ChannelService } from 'pinus'; import { resResult } from '../../../pubUtils/util'; -import { ON_ADD_CHANNEL_ROUTE, ON_GROUP_MSG_ROUTE, ON_LEAVE_CHANNEL_ROUTE, STATUS } from '../../../consts'; +import { ON_ADD_CHANNEL_ROUTE, ON_GROUP_MSG_ROUTE, ON_LEAVE_CHANNEL_ROUTE, STATUS, CHANNEL_PREFIX } from '../../../consts'; import { PrivateMessageType } from '../../../db/PrivateMessage'; import { addUserToChannel, getSimpleRoleInfo } from '../../../services/roleService'; import { ChannelUser } from '../../../domain/ChannelUser'; -import { getWorldChannelSid } from '../../../services/chatService'; +import { getWorldChannelSid, groupRoomId } from '../../../services/chatService'; export default function (app: Application) { return new ChatRemote(app); @@ -172,7 +172,7 @@ export class ChatRemote { * @param serverId */ public async sendGuildActivityEnd(serverId: number) { - let roomId = await getWorldChannelSid(serverId); + let roomId = groupRoomId(CHANNEL_PREFIX.WORLD, serverId); let channel = this.channelService.getChannel(roomId, false); if (!channel) return; channel.pushMessage(this.GUILD_ACTIVITY_END, resResult(STATUS.SUCCESS, { })); diff --git a/game-server/app/servers/guild/handler/raceActivityHandler.ts b/game-server/app/servers/guild/handler/raceActivityHandler.ts index efd2c821f..d83f818a6 100644 --- a/game-server/app/servers/guild/handler/raceActivityHandler.ts +++ b/game-server/app/servers/guild/handler/raceActivityHandler.ts @@ -1,4 +1,7 @@ -import { Application, ChannelService } from "pinus"; +import { Application, ChannelService, BackendSession } from "pinus"; +import { GUILD_ACTIVITY_TYPE, STATUS } from "../../../consts"; +import { resResult } from "../../../pubUtils/util"; +import { getGuildActivityStatus } from "../../../services/guildActivityService"; export default function (app: Application) { return new RaceActivityHandler(app); @@ -11,6 +14,29 @@ export class RaceActivityHandler { this.channelService = app.get('channelService'); } + private aid = GUILD_ACTIVITY_TYPE.GATE_ACTIVITY; // 蛮夷入侵id + + // 进入粮草先行界面 + async getRaceActivity(msg: {}, session: BackendSession) { + + const roleId = session.get('roleId'); + const roleName = session.get('roleName'); + const serverId = session.get('serverId'); + const guildCode = session.get('guildCode'); + if(!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH); + + let statusResult = getGuildActivityStatus(this.aid); + if(!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND); + + + + return resResult(STATUS.SUCCESS, { + ...statusResult, + hasJoin: true, + woodenHorse: {}, + guildRank:[] + }); + } } \ No newline at end of file diff --git a/game-server/app/services/guildActivityService.ts b/game-server/app/services/guildActivityService.ts index 396153d1d..ee295e0c0 100644 --- a/game-server/app/services/guildActivityService.ts +++ b/game-server/app/services/guildActivityService.ts @@ -8,7 +8,7 @@ import { GUILD_ACTIVITY_STATUS, GET_POINT_WAYS, GUILD_ACTIVITY_TYPE, REDIS_KEY, import { Record, UserGuildActivityRecModel } from "../db/UserGuildActivityRec"; import { GateMembersRec, GateActivityObject, CityActivityObject, CityParam, Member } from "../domain/battleField/guildActivity"; import { DicGuildActivity } from "../pubUtils/dictionary/DicGuildActivity"; -import { getUnionRank, getRank, getGuildKeyName, getMyUnionRank, getRankScore, getCityKeyName } from "./redisService"; +import { getUnionRank, getRank, getGuildKeyName, getMyUnionRank, getRankScore, getCityKeyName, getAllServers } from "./redisService"; import { GuildModel } from "../db/Guild"; import { SimpleGuildRankParam, SimpleRoleRankParam } from "../domain/rank"; import { getGuildChannelSid, getWorldChannelSid, getCityChannelSid } from "./chatChannelService"; @@ -221,7 +221,7 @@ export async function sendAllGuildRanks(aid: number) { } else if (aid == GUILD_ACTIVITY_TYPE.CITY_ACTIVITY) { let obj = getCityActivityObj(); let { cities } = obj.getAllCities(); - console.log(JSON.stringify(cities)); + // console.log(JSON.stringify(cities)); for(let { serverId, cityId, guildCodes } of cities) { for(let guildCode of guildCodes) { let ranks = await getCityActivityRank(guildCode, serverId, cityId); @@ -233,7 +233,7 @@ export async function sendAllGuildRanks(aid: number) { } /** - * 活动结束发送结束信号以及结算奖励 + * 活动结算奖励 * @param aid 活动类型 */ export async function sendGuildActEndMsg(aid: number) { @@ -242,9 +242,6 @@ export async function sendGuildActEndMsg(aid: number) { let obj = getGateActivityObj(); let guilds = obj.getGuilds(); for(let [ serverId, guildCodes ] of guilds) { - let chatSid = await getWorldChannelSid(serverId); - pinus.app.rpc.chat.chatRemote.sendGuildActivityEnd.toServer(chatSid, serverId); - for(let guildCode of guildCodes) { await gateActivitySettleReward(guildCode, serverId); } @@ -258,14 +255,21 @@ export async function sendGuildActEndMsg(aid: number) { } // 发完之后再做下周自动宣战 for(let serverId of serverlists) { - let chatSid = await getWorldChannelSid(serverId); - pinus.app.rpc.chat.chatRemote.sendGuildActivityEnd.toServer(chatSid, serverId); await autoDeclare(serverId); } cityActivityObj = new CityActivityObject(); } } +// 全服发送结束新号 +export async function sendEndMsgToAll() { + let serverlist = await getAllServers(); + for(let serverId of serverlist) { + let chatSid = await getWorldChannelSid(serverId); + pinus.app.rpc.chat.chatRemote.sendGuildActivityEnd.toServer(chatSid, serverId); + } +} + /** * 单个军团城门血条破了之后给他发奖励 * @param guildCode 军团code diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index 682c15451..68812f0c0 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -5,24 +5,26 @@ import PvpDefenseType,{ PvpDefenseModel } from '../db/PvpDefense'; import { PVP } from '../pubUtils/dicParam'; import { nowSeconds, getTodayZeroPoint, getAge } from '../pubUtils/timeUtil'; import { getPvpGkWarIds, getPvpRankRewards, getPvpHeroRewards, getResultMaxRank, getTodayGuildActivity } from '../pubUtils/data'; -import { deepCopy, getRandomArr, resResult, shouldRefresh } from '../pubUtils/util'; +import { deepCopy, getRandomArr, resResult } from '../pubUtils/util'; import { getLvByScore } from './pvpService'; -import { getMyRank, setRank, resetPvpRanks, getAllOnlineRoles } from './redisService'; +import { getMyRank, setRank, resetPvpRanks, getAllOnlineRoles, delGuildActivityRank } from './redisService'; import { MAIL_TYPE, REDIS_KEY, ADULT_AGE, GUEST_MAX_TIME, ADDICTION_PREVENTION_CODE, GUILD_ACTIVITY_STATUS, GUILD_ACTIVITY_TYPE } from '../consts'; import { RankParam } from '../domain/rank'; import { RoleModel } from '../db/Role'; import { MailModel, MailType } from '../db/Mail'; -import { pinus, Application } from 'pinus'; +import { pinus } from 'pinus'; import { indexOf } from 'underscore'; import { PvpSeasonResultModel } from '../db/PvpSeasonResult'; import { settleGuildWeekly } from './guildService'; import { STATUS } from '../consts/statusCode'; import { getMailContent, sendMail } from './mailService'; import { reportOnline } from '../pubUtils/httpUtil'; -import User, { UserModel } from '../db/User'; -import { getGuildActivityByDic, setMedianCe } from './guildActivityService'; +import { UserModel } from '../db/User'; +import { getGuildActivityByDic, setMedianCe, sendEndMsgToAll } from './guildActivityService'; import { sendUngotDividendJob, startGuildAuction, startWorldAuction, stopAuction } from './auctionService'; import { DicGuildActivity } from '../pubUtils/dictionary/DicGuildActivity'; +import { GuildModel } from '../db/Guild'; + const PER_SECOND = 1 * 1000; const PER_DAY = 24 * 60 * 60; const SETTLE_DIFF = 29 * 60; @@ -343,6 +345,18 @@ async function guildActivitySchedule() { /***********guildActivitySchedule***********/ let dicGuildActivity = getTodayGuildActivity(); + let map = new Map(); + let guilds = await GuildModel.findAllGuild('serverId code'); + for(let { serverId, code } of guilds) { + if(map.has(serverId)) { + map.get(serverId).push(code); + } else { + map.set(serverId, [code]); + } + } + await delGuildActivityRank(dicGuildActivity.id, map); + + scheduleJob('guildActivityStart', `0 ${dicGuildActivity.startMinute} ${dicGuildActivity.startTime} * * ?`, guildActivityStartSchedule); let statusResult = getGuildActivityByDic(dicGuildActivity); @@ -395,7 +409,8 @@ export async function guildActivityStart(dicGuildActivity?: DicGuildActivity) { // 结束军团活动 export async function gateActivityEnd() { - console.log('*****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); @@ -417,7 +432,8 @@ export async function gateActivitySeconds() { // 诸侯混战 // 结束军团活动 export async function cityActivityEnd() { - console.log('*****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); diff --git a/shared/domain/battleField/guildActivity.ts b/shared/domain/battleField/guildActivity.ts index 8531d206d..4838c7cb3 100644 --- a/shared/domain/battleField/guildActivity.ts +++ b/shared/domain/battleField/guildActivity.ts @@ -202,6 +202,22 @@ export class CityActivityObject { } } + +// 军团诸侯混战等数据 +export class RaceActivityObject { + private members: Map> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}] + private woodenHorses: Map = new Map(); // 每个军团的木牛流马 guildCode => WoodenHorse + private events: Map = new Map(); // 每个军团遇到的事件 + + getWoodenHorse(guildCode: string) { + if(!this.woodenHorses.has(guildCode)) { + // this.woodenHorses.set(guildCode, ) + } + let wh = this.woodenHorses.get(guildCode); + + } +} + class WoodenHorseMember { roleId: string; roleName: string; @@ -248,13 +264,13 @@ export class WoodenHorse { export class Event { id: number; - timestamp: number; fromGuild: string; toGuild: string; - startDistance: number; - effect: number[]; + startTime?: number; + startDistance?: number; endTimestamp?: number; endDistance?: number; + effect: number[]; } export interface GuildGateRankParam { diff --git a/shared/pubUtils/dictionary/DicGuildActivity.ts b/shared/pubUtils/dictionary/DicGuildActivity.ts index 24743b255..88e3785e1 100644 --- a/shared/pubUtils/dictionary/DicGuildActivity.ts +++ b/shared/pubUtils/dictionary/DicGuildActivity.ts @@ -29,7 +29,8 @@ let arr = JSON.parse(str); export const dicGuildActivity = new Map(); arr.forEach(o => { - o.openDay = parseNumberList(o.openDay) + o.openDay = parseNumberList(o.openDay); + if(!o.startMinute) o.startMinute = 0; dicGuildActivity.set( o.id, o ); }); arr = undefined; \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_guildActivity.json b/shared/resource/jsons/dic_zyz_guildActivity.json index 25937b959..f55f1be99 100644 --- a/shared/resource/jsons/dic_zyz_guildActivity.json +++ b/shared/resource/jsons/dic_zyz_guildActivity.json @@ -2,10 +2,10 @@ { "id": 1, "name": "蛮夷入侵", - "openDay": "3&0", + "openDay": "4", "duringTime": 900, - "startTime": 20, - "startMinute": 0, + "startTime": 15, + "startMinute": 15, "countDown": 5, "warid": 7001, "honour": 500 @@ -13,10 +13,10 @@ { "id": 2, "name": "诸侯混战", - "openDay": "2&4&6", + "openDay": "2&6", "duringTime": 900, - "startTime": 20, - "startMinute": 0, + "startTime": 11, + "startMinute": 48, "countDown": 5, "warid": 7002, "honour": 500 @@ -26,8 +26,8 @@ "name": "粮草先行", "openDay": "1&5", "duringTime": 600, - "startTime": 20, - "startMinute": 0, + "startTime": 11, + "startMinute": 48, "countDown": 5, "warid": 0, "honour": 200 diff --git a/shared/resource/warJsons/7001.json b/shared/resource/warJsons/7001.json index f71b9b502..06f00ee12 100644 --- a/shared/resource/warJsons/7001.json +++ b/shared/resource/warJsons/7001.json @@ -387,7 +387,7 @@ "star": 0, "spine": 0, "bossStage": 0, - "enemyType": 2, + "enemyType": 6, "dest_oppo": 1001 }, { @@ -422,7 +422,7 @@ "outIndex": 11, "dirction": 1, "x": 11, - "y": 2, + "y": 3, "var": 1512, "lv": 30, "hide": 1, @@ -433,7 +433,7 @@ "star": 0, "spine": 0, "bossStage": 0, - "enemyType": 2, + "enemyType": 6, "dest_oppo": 1001 }, { @@ -537,7 +537,7 @@ "outIndex": 4, "dirction": 1, "x": 10, - "y": 2, + "y": 3, "var": 1517, "lv": 30, "hide": 1, @@ -560,7 +560,7 @@ "outIndex": 5, "dirction": 1, "x": 11, - "y": 2, + "y": 3, "var": 1518, "lv": 30, "hide": 1,