diff --git a/game-server/app/servers/chat/remote/chatRemote.ts b/game-server/app/servers/chat/remote/chatRemote.ts index cd3683b6a..1dd9d3b10 100644 --- a/game-server/app/servers/chat/remote/chatRemote.ts +++ b/game-server/app/servers/chat/remote/chatRemote.ts @@ -8,7 +8,7 @@ import { ChannelUser } from '../../../domain/ChannelUser'; import { getWorldChannelSid, groupRoomId } from '../../../services/chatService'; import { reloadResources } from '../../../pubUtils/data'; import { GeneralRankParam } from '../../../domain/rank'; -import { getAllGuildActivityStatus } from '../../../services/guildActivityService'; +import { getAllGuildActivityStatus } from '../../../services/guildActivity/guildActivityService'; import { MailParam } from '../../../domain/roleField/mail'; import { RankFirstType } from '../../../db/RankFirst'; import { LotType } from '../../../db/Lot'; diff --git a/game-server/app/servers/connector/remote/connectorRemote.ts b/game-server/app/servers/connector/remote/connectorRemote.ts index 6ff38d32c..94bfb2b87 100644 --- a/game-server/app/servers/connector/remote/connectorRemote.ts +++ b/game-server/app/servers/connector/remote/connectorRemote.ts @@ -5,7 +5,7 @@ import { reloadResources } from '../../../pubUtils/data'; import { UserGuildType } from '../../../db/UserGuild'; import { kickUser } from '../../../services/connectorService'; import { PVPConfigModel, PVPConfigType } from '../../../db/SystemConfig'; -import { setDicAuctionTime } from '../../../services/guildActivityService'; +import { setDicAuctionTime } from '../../../services/guildActivity/guildActivityService'; import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService'; import { taflush } from '../../../services/sdkService'; import { errlogger } from '../../../util/logger'; diff --git a/game-server/app/servers/guild/handler/cityActivityHandler.ts b/game-server/app/servers/guild/handler/cityActivityHandler.ts index 0e939da22..ecb66c9e9 100644 --- a/game-server/app/servers/guild/handler/cityActivityHandler.ts +++ b/game-server/app/servers/guild/handler/cityActivityHandler.ts @@ -1,7 +1,7 @@ import { Application, ChannelService, BackendSession, pinus, HandlerService, } from "pinus"; import { GUILD_ACTIVITY_TYPE, STATUS, REDIS_KEY, GUILD_POINT_WAYS, CITY_STATUS, TASK_TYPE, ITEM_CHANGE_REASON } from "../../../consts"; import { resResult } from "../../../pubUtils/util"; -import { getGuildActivityStatus, getCityActivityObj, getCityStatus as pubGetCityStatus, getCities, getCityActivityRank, sendSingleCityActEndMsg, getMedianCe } from "../../../services/guildActivityService"; +import { getGuildActivityStatus, getCityActivityObj, getCityStatus as pubGetCityStatus, getCities, getCityActivityRank, sendSingleCityActEndMsg, getMedianCe } from "../../../services/guildActivity/guildActivityService"; import { GuildActivityCityModel } from "../../../db/GuildActivityCity"; import { gameData } from "../../../pubUtils/data"; import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec"; diff --git a/game-server/app/servers/guild/handler/gateActivityHandler.ts b/game-server/app/servers/guild/handler/gateActivityHandler.ts index 45fb32c46..d00608fc7 100644 --- a/game-server/app/servers/guild/handler/gateActivityHandler.ts +++ b/game-server/app/servers/guild/handler/gateActivityHandler.ts @@ -1,5 +1,5 @@ import { Application, BackendSession, ChannelService, pinus, HandlerService, } from "pinus"; -import { getMedianCe, getGuildActivityStatus, getRecordScore, getGateActivityObj, participants, getGateActivityRank, getCityActivityObj } from "../../../services/guildActivityService"; +import { getMedianCe, getGuildActivityStatus, getRecordScore, getGateActivityObj, participants, getGateActivityRank, getCityActivityObj } from "../../../services/guildActivity/guildActivityService"; import { resResult } from "../../../pubUtils/util"; import { STATUS, GUILD_ACTIVITY_TYPE, GUILD_POINT_WAYS, ENEMIES_TYPE, GET_POINT_WAYS, TASK_TYPE } from "../../../consts"; import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec"; @@ -51,12 +51,9 @@ export class GateActivityHandler { let ranks = await getGateActivityRank(guildCode, serverId, roleId, roleName); - let obj = getGateActivityObj(); - let gateHp = obj.getGateHpAndInc(guildCode); return resResult(STATUS.SUCCESS, { ...statusResult, challengeCnt: GUILDACTIVITY.GATEACTIVITY_CHALLENGE_TIMES - challengeCnt, - gateHp, ...ranks }); } @@ -74,13 +71,9 @@ export class GateActivityHandler { if (!guildCode) return resResult(STATUS.GUILD_AUTH_NOT_ENOUGH); let obj = getGateActivityObj(); - let gateHp = obj.getGateHpAndInc(guildCode); - if (gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO); - let statusResult = getGuildActivityStatus(this.aid); if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND); - // TODO 测试完成后去掉这条判断 - // if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN); + if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN); let guildActivityRec = await GuildActivityRecordModel.getRecord(guildCode, serverId, this.aid); if (!guildActivityRec) return resResult(STATUS.INTERNAL_ERR); @@ -113,7 +106,6 @@ export class GateActivityHandler { ...statusResult, guildScore: guildScore || 0, myScore: 0, - gateHp, challengeCnt: GUILDACTIVITY.GATEACTIVITY_CHALLENGE_TIMES - challengeCnt, medianCe }); @@ -131,11 +123,7 @@ export class GateActivityHandler { let statusResult = getGuildActivityStatus(this.aid); if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND); - // TODO 测试完成后去掉这条判断 - // if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN); - - let gateHp = obj.getGateHpAndInc(guildCode); - if (gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO); + if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN); // 计算record内得分 let memberRecord = obj.getMemberRecord(code, roleId); @@ -161,67 +149,25 @@ export class GateActivityHandler { code: rec.code, ...statusResult, guildScore: guildScore || 0, - myScore: myScore || 0, - gateHp + myScore: myScore || 0 }); } - // 上报敌军攻打城门情况 - async hitGate(msg: { code: string, damage: number }, session: BackendSession) { - let roleId = session.get('roleId'); - let guildCode = session.get('guildCode'); - let serverId = session.get('serverId'); - - let { code, damage } = msg; - let obj = getGateActivityObj(); - let gateHp = obj.getGateHpAndInc(guildCode); - if (gateHp <= 0) return resResult(STATUS.GATE_HP_IS_ZERO); - - let statusResult = getGuildActivityStatus(this.aid); - if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND); - // TODO 测试完成后去掉这条判断 - // if(!statusResult.isOpen) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN); - - gateHp = obj.getGateHpAndInc(guildCode, -1 * damage); - // if (gateHp <= 0) { - // // 推送 停止活动并结算奖励 - // await sendSingleGateActEndMsg(guildCode, serverId); - // } - // 推送 城门血量 - let chatSid = await getGuildChannelSid(guildCode); - pinus.app.rpc.chat.guildRemote.pushGateHp.toServer(chatSid, guildCode, gateHp); - - // 返回当前军团总军功 - let myR = new Rank(REDIS_KEY.USER_GATE_ACTIVITY, { serverId, guildCode }, true); - let myScore = await myR.getMyScore({ roleId }); - let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId }, true); - let guildScore = await r.getMyScore({ guildCode }); - - return resResult(STATUS.SUCCESS, { - code, - ...statusResult, - guildScore, - myScore, - gateHp - }) - } - // 结束挑战 - async battleEnd(msg: { code: string, isSuccess: boolean }, session: BackendSession) { + async battleEnd(msg: { code: string, isSuccess: boolean, gateHp: number }, session: BackendSession) { let roleId = session.get('roleId'); let sid = session.get('sid'); let guildCode = session.get('guildCode'); let serverId = session.get('serverId'); - let { code, isSuccess } = msg; - let obj = getGateActivityObj(); + let { code, isSuccess, gateHp } = msg; let statusResult = getGuildActivityStatus(this.aid); if (!statusResult) return resResult(STATUS.DIC_DATA_NOT_FOUND); // 更新userGuildActivityRecord - let myGuildActivityRec = await UserGuildActivityRecModel.updateInfo(code, { isSuccess, isCompleted: true }); + let myGuildActivityRec = await UserGuildActivityRecModel.updateInfo(code, { isSuccess, isCompleted: true, gateHp }); if (!myGuildActivityRec) return resResult(STATUS.INTERNAL_ERR); // 功劳簿计算 @@ -252,7 +198,6 @@ export class GateActivityHandler { // 返回当前军团总军功 let guildScore = await r.getMyScore({ guildCode }); let myScore = await myR.getMyScore({ roleId }); - let gateHp = obj.getGateHpAndInc(guildCode); let info = { round, @@ -265,7 +210,6 @@ export class GateActivityHandler { ...statusResult, guildScore, myScore, - gateHp, info }) } diff --git a/game-server/app/servers/guild/handler/guildBossHandler.ts b/game-server/app/servers/guild/handler/guildBossHandler.ts index 2522b7c09..c361a4a3f 100644 --- a/game-server/app/servers/guild/handler/guildBossHandler.ts +++ b/game-server/app/servers/guild/handler/guildBossHandler.ts @@ -22,7 +22,7 @@ import { getGoldObject } from '../../../pubUtils/itemUtils'; import { RoleModel } from '../../../db/Role'; import { sendMailToGuildByContent } from '../../../services/mailService'; import { genAuction } from '../../../services/auctionService'; -import { getMedianCe } from '../../../services/guildActivityService'; +import { getMedianCe } from '../../../services/guildActivity/guildActivityService'; export default function (app: Application) { new HandlerService(app, {}); diff --git a/game-server/app/servers/guild/handler/guildTrainHandler.ts b/game-server/app/servers/guild/handler/guildTrainHandler.ts index 76805c5af..342ca85db 100644 --- a/game-server/app/servers/guild/handler/guildTrainHandler.ts +++ b/game-server/app/servers/guild/handler/guildTrainHandler.ts @@ -19,7 +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'; +import { sendPopUpActivityData } from '../../../services/guildActivity/guildActivityService'; import { guildInter, RewardInter } from '../../../pubUtils/interface'; import { getGuildTrainGkInfo } from '../../../pubUtils/data'; diff --git a/game-server/app/servers/guild/handler/raceActivityHandler.ts b/game-server/app/servers/guild/handler/raceActivityHandler.ts index 8a6efefe8..068a7ac11 100644 --- a/game-server/app/servers/guild/handler/raceActivityHandler.ts +++ b/game-server/app/servers/guild/handler/raceActivityHandler.ts @@ -1,7 +1,7 @@ import { Application, ChannelService, BackendSession, HandlerService, } from "pinus"; import { GUILD_ACTIVITY_TYPE, STATUS, GUILD_ACTIVITY_STATUS, GUILD_POINT_WAYS, REDIS_KEY, TASK_TYPE } from "../../../consts"; import { resResult } from "../../../pubUtils/util"; -import { getGuildActivityStatus, getRaceActivityObj, getRaceActivityRank, getWoodenHorseList, calWoodenHorseAndSend, raceActivitySettleReward } from "../../../services/guildActivityService"; +import { getGuildActivityStatus, getRaceActivityObj, getRaceActivityRank, getWoodenHorseList, calWoodenHorseAndSend, raceActivitySettleReward } from "../../../services/guildActivity/guildActivityService"; import { UserGuildModel } from "../../../db/UserGuild"; import { GuildActivityRecordModel } from "../../../db/GuildActivityRec"; import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec"; @@ -9,7 +9,6 @@ import { addActive } from "../../../services/guildService"; import { Rank } from "../../../services/rankService"; import { checkActivityTask, checkTask } from "../../../services/taskService"; import { guildInter } from "../../../pubUtils/interface"; -import { RaceActivityObject } from "../../../services/guildActivityObjService"; import { getGuildChannelSid } from "../../../services/chatService"; export default function (app: Application) { diff --git a/game-server/app/servers/guild/remote/guildActivityRemote.ts b/game-server/app/servers/guild/remote/guildActivityRemote.ts index b9deb51c0..d75351e7a 100644 --- a/game-server/app/servers/guild/remote/guildActivityRemote.ts +++ b/game-server/app/servers/guild/remote/guildActivityRemote.ts @@ -1,5 +1,5 @@ import { Application, ChannelService, HandlerService, } from 'pinus'; -import { sendAllGuildRanks, sendGuildActEndMsg, calWoodenHorseAndSend, sendRaceStartMsg, setDicGuildActivity, setDicAuctionTime } from '../../../services/guildActivityService'; +import { sendAllGuildRanks, sendGuildActEndMsg, calWoodenHorseAndSend, sendRaceStartMsg, setDicGuildActivity, setDicAuctionTime } from '../../../services/guildActivity/guildActivityService'; import { gameData } from '../../../pubUtils/data'; import { setWeek } from '../../../pubUtils/timeUtil'; import { sendUngotDividend } from '../../../services/auctionService'; diff --git a/game-server/app/servers/systimer/remote/systimerRemote.ts b/game-server/app/servers/systimer/remote/systimerRemote.ts index 29faf583a..5b40e39e9 100644 --- a/game-server/app/servers/systimer/remote/systimerRemote.ts +++ b/game-server/app/servers/systimer/remote/systimerRemote.ts @@ -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 { setDicAuctionTime, setDicGuildActivity } from '../../../services/guildActivityService'; +import { setDicAuctionTime, setDicGuildActivity } from '../../../services/guildActivity/guildActivityService'; import { setWeek } from '../../../pubUtils/timeUtil'; import { ServerlistType } from '../../../db/Serverlist'; import { MarqueeType } from '../../../db/Marquee'; diff --git a/game-server/app/services/auctionService.ts b/game-server/app/services/auctionService.ts index 89a66fb28..f8f553aee 100644 --- a/game-server/app/services/auctionService.ts +++ b/game-server/app/services/auctionService.ts @@ -8,7 +8,7 @@ import { gameData, getGoodById } from '../pubUtils/data'; import { DividendParam, DividendType } from '../db/Dividend'; import { sendMailByContent } from './mailService'; import { FrontendOrBackendSession, pinus } from 'pinus'; -import { participants } from './guildActivityService'; +import { participants } from './guildActivity/guildActivityService'; import { Member } from '../domain/battleField/guildActivity'; import * as dicParam from '../pubUtils/dicParam'; import { RewardInter } from '../pubUtils/interface'; diff --git a/game-server/app/services/connectorService.ts b/game-server/app/services/connectorService.ts index 9bae75321..4d2b64647 100644 --- a/game-server/app/services/connectorService.ts +++ b/game-server/app/services/connectorService.ts @@ -31,7 +31,7 @@ import { getEvent } from './eventSercive'; import { getBattleListOfMain } from './normalBattleService'; import { GuildType } from '../db/Guild'; import UserGuild, { UserGuildType } from '../db/UserGuild'; -import { setMedianCe, getAllGuildActivityStatus } from './guildActivityService'; +import { setMedianCe, getAllGuildActivityStatus } from './guildActivity/guildActivityService'; import { getAllOnlineRoles } from './redisService'; import Item from '../db/Item'; import { PvpDefenseModel } from '../db/PvpDefense'; diff --git a/game-server/app/services/guildActivity/cityActivityObj.ts b/game-server/app/services/guildActivity/cityActivityObj.ts new file mode 100644 index 000000000..f74917e75 --- /dev/null +++ b/game-server/app/services/guildActivity/cityActivityObj.ts @@ -0,0 +1,118 @@ +// 军团活动蛮夷入侵城门血量等数据存储 + +import { Member } from "../../domain/battleField/guildActivity"; + +// 军团诸侯混战等数据 +export class CityActivityObject { + private gateHp: Map = new Map(); // 城门血条,每个cityId有一条血条 serverId&cityId => gateHp + private members: Map> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}] + private cities: Map = new Map(); // 各个城池参与的军团 serverId&cityId => [guildCode] + private guilds: Map = new Map(); // 军团所在的城池 guildCode => cityId + private historyCity: Map = new Map(); // 获取自己打开过的城池的页面 roleId => cityId + private sentCity: string[] = []; + + private getKey(serverId: number, cityId: number) { + return `${serverId}_${cityId}`; + } + + private decodeKey(key: string) { + let arr = key.split('_'); + return { + serverId: parseInt(arr[0]), + cityId: parseInt(arr[1]) + } + } + + public getObj( serverId: number, cityId: number, guildCode: string) { + let key = this.getKey(serverId, cityId); + return { + gateHp: this.gateHp.get(key), + members: this.members.get(guildCode), + city: this.cities.get(key), + guild: this.guilds.get(guildCode) + } + } + + public getAllCities() { + let allCities = new Array<{ serverId: number, cityId: number, guildCodes: string[]}>(); + let serverlists = new Array(); + for(let [key, guildCodes] of this.cities) { + if(this.sentCity.indexOf(key) == -1) { + let { serverId, cityId } = this.decodeKey(key); + allCities.push({ serverId, cityId, guildCodes }); + if(!serverlists.includes(serverId)) serverlists.push(serverId); + } + } + return {cities: allCities, serverlists}; + } + + public getGuildsInCity(serverId: number, cityId: number) { + let key = this.getKey(serverId, cityId); + return this.cities.get(key)||[]; + } + + public getMembersOfGuild(guildCode: string) { + return this.members.get(guildCode)||[]; + } + + public getGateHpAndInc(serverId: number, cityId: number, maxHp: number, inc: number = 0) { + let key = this.getKey(serverId, cityId); + let gateHp = this.gateHp.get(key); + if(!this.gateHp.has(key)) { + gateHp = maxHp; + } + if(inc != 0) { + gateHp += inc; + this.gateHp.set(key, gateHp); + } + if(gateHp <= 0) gateHp = 0; + return gateHp + } + + public getHistoryCity(roleId: string) { + return this.historyCity.get(roleId) + } + + public setHistoryCity(roleId: string, cityId: number) { + return this.historyCity.set(roleId, cityId); + } + + + public pushMembers(guildCode: string, roleId: string, job: number, code: string) { + + if(this.members.has(guildCode)) { + let members = this.members.get(guildCode); + if(members.findIndex(cur => cur.roleId == roleId) == -1) { + members.push({ roleId, job, code }); + } + } else { + let arr = new Array(); + arr.push(roleId); + this.members.set(guildCode, [{ roleId, job, code }]); + } + } + + public pushGuild(guildCode: string, serverId: number, cityId: number) { + let key = this.getKey(serverId, cityId); + if(!this.cities.has(key)) { + this.cities.set(key, [guildCode]); + } else { + let arr = this.cities.get(key); + if(!arr.includes(guildCode)) { + arr.push(guildCode); + } + } + this.guilds.set(guildCode, cityId); + } + + public delCityRecord(cityId: number, serverId: number) { + let key = this.getKey(serverId, cityId); + // let guildCodes = this.cities.get(key)||[]; + // for(let guildCode of guildCodes) { + // this.members.delete(guildCode); + // this.guilds.delete(guildCode); + // } + // this.cities.delete(key); + this.sentCity.push(key); + } +} \ No newline at end of file diff --git a/game-server/app/services/guildActivity/gateActivityObj.ts b/game-server/app/services/guildActivity/gateActivityObj.ts new file mode 100644 index 000000000..a4e601bce --- /dev/null +++ b/game-server/app/services/guildActivity/gateActivityObj.ts @@ -0,0 +1,67 @@ + +// 军团活动蛮夷入侵城门血量等数据存储 + +import { Member, GateMembersRec } from "../../domain/battleField/guildActivity"; +import { GUILDACTIVITY } from "../../pubUtils/dicParam"; + +export class GateActivityObject { + private members: Map> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}] + private membersRecord: Map = new Map(); // 每个成员的回合数和敌军数,防刷 recCode => GateMembersRec + private guilds: Map = new Map(); // 参加的所有军团 server => [guildCode] + + public getObj(guildCode: string, serverId: number) { + // console.log(guildCode, serverId) + return { + members: this.members.get(guildCode)||[], + memberesRecord: [...this.membersRecord], + guilds: this.guilds.get(serverId)||[] + } + } + + public getGuilds() { + return this.guilds; + } + + public pushMembers(guildCode: string, serverId: number, roleId: string, job: number, code: string) { + + if(this.members.has(guildCode)) { + let members = this.members.get(guildCode); + if(members.findIndex(cur => cur.roleId == roleId) == -1) { + members.push({ roleId, job, code }); + } + } else { + let arr = new Array(); + arr.push(roleId); + this.members.set(guildCode, [{ roleId, job, code }]); + } + if(this.guilds.has(serverId)) { + let arr = this.guilds.get(serverId); + if(!arr.includes(guildCode)) arr.push(guildCode); + this.guilds.set(serverId, arr); + } else { + this.guilds.set(serverId, [guildCode]); + } + + } + + public getMemberRecord(recCode: string, roleId: string) { + return this.membersRecord.get(recCode)||new GateMembersRec(roleId) + } + + public setMemberRecord(recCode: string, newMemberRecord: GateMembersRec) { + this.membersRecord.set(recCode, newMemberRecord); + } + + public delMemberRecord(recCode: string) { + this.membersRecord.delete(recCode); + } + + public delGuildRecord(guildCode: string, serverId: number) { + let guildList = this.guilds.get(serverId); + if(guildList) { + let index = guildList.indexOf(guildCode); + guildList.splice(index, 1); + } + this.members.delete(guildCode); + } +} \ No newline at end of file diff --git a/game-server/app/services/guildActivityService.ts b/game-server/app/services/guildActivity/guildActivityService.ts similarity index 94% rename from game-server/app/services/guildActivityService.ts rename to game-server/app/services/guildActivity/guildActivityService.ts index 428a833c8..fc327bee6 100644 --- a/game-server/app/services/guildActivityService.ts +++ b/game-server/app/services/guildActivity/guildActivityService.ts @@ -1,30 +1,32 @@ -import { ServerlistModel } from "../db/Serverlist"; -import { RoleModel } from "../db/Role"; -import { reduceCe } from "../pubUtils/util"; -import { GUILDACTIVITY } from "../pubUtils/dicParam"; -import { gameData, getGuildAuctionRewards, getCityActivityRewards } from "../pubUtils/data"; -import { getCurDay, nowSeconds, getTimeFun } from "../pubUtils/timeUtil"; -import { GUILD_ACTIVITY_STATUS, GET_POINT_WAYS, GUILD_ACTIVITY_TYPE, REDIS_KEY, AUCTION_SOURCE, MAIL_TYPE, CITY_STATUS, DEBUG_MAGIC_WORD, GUILD_POINT_WAYS, TASK_TYPE, AUCTION_TIME } from "../consts"; -import { Record, UserGuildActivityRecModel } from "../db/UserGuildActivityRec"; -import { GateMembersRec, CityParam, Member, WoodenHorse } from "../domain/battleField/guildActivity"; -import { DicGuildActivity } from "../pubUtils/dictionary/DicGuildActivity"; -import { getAllServers, getRoleOnlineInfo } from "./redisService"; -import { SimpleGuildRankParam, SimpleRoleRankParam, SimpleGuildRankWithTimeParam, GuildRankInfo, RoleRankInfo } from "../domain/rank"; -import { getGuildChannelSid, getWorldChannelSid, getCityChannelSid } from "./chatChannelService"; +import { ServerlistModel } from "../../db/Serverlist"; +import { RoleModel } from "../../db/Role"; +import { reduceCe } from "../../pubUtils/util"; +import { GUILDACTIVITY } from "../../pubUtils/dicParam"; +import { gameData, getGuildAuctionRewards, getCityActivityRewards } from "../../pubUtils/data"; +import { getCurDay, nowSeconds, getTimeFun } from "../../pubUtils/timeUtil"; +import { GUILD_ACTIVITY_STATUS, GET_POINT_WAYS, GUILD_ACTIVITY_TYPE, REDIS_KEY, AUCTION_SOURCE, MAIL_TYPE, CITY_STATUS, DEBUG_MAGIC_WORD, GUILD_POINT_WAYS, TASK_TYPE, AUCTION_TIME } from "../../consts"; +import { Record, UserGuildActivityRecModel } from "../../db/UserGuildActivityRec"; +import { GateMembersRec, CityParam, Member, WoodenHorse } from "../../domain/battleField/guildActivity"; +import { DicGuildActivity } from "../../pubUtils/dictionary/DicGuildActivity"; +import { getAllServers, getRoleOnlineInfo } from "../redisService"; +import { SimpleGuildRankParam, SimpleRoleRankParam, SimpleGuildRankWithTimeParam, GuildRankInfo, RoleRankInfo } from "../../domain/rank"; +import { getGuildChannelSid, getWorldChannelSid, getCityChannelSid } from "../chatChannelService"; import { pinus } from "pinus"; -import { GuildActivityRecordModel } from "../db/GuildActivityRec"; -import { genAuction } from "./auctionService"; -import { sendMailByContent } from "./mailService"; -import { getHonourObject } from '../pubUtils/itemUtils'; -import { GuildActivityCityType, GuildActivityCityModel } from "../db/GuildActivityCity"; -import { DicCityActivity } from "../pubUtils/dictionary/DicCityActivity"; -import { GateActivityObject, CityActivityObject, RaceActivityObject } from "./guildActivityObjService"; -import { Rank } from "./rankService"; -import { BossInstanceModel } from "../db/BossInstance"; -import { UserGuildModel } from "../db/UserGuild"; -import { raceActivityEnd } from "./timeTaskService"; -import { addActive } from "./guildService"; -import { checkTask, checkActivityTask } from "./taskService"; +import { GuildActivityRecordModel } from "../../db/GuildActivityRec"; +import { genAuction } from "../auctionService"; +import { sendMailByContent } from "../mailService"; +import { getHonourObject } from '../../pubUtils/itemUtils'; +import { GuildActivityCityType, GuildActivityCityModel } from "../../db/GuildActivityCity"; +import { DicCityActivity } from "../../pubUtils/dictionary/DicCityActivity"; +import { CityActivityObject } from "./cityActivityObj"; +import { GateActivityObject } from "./gateActivityObj"; +import { RaceActivityObject } from "./raceActivityObj"; +import { Rank } from "../rankService"; +import { BossInstanceModel } from "../../db/BossInstance"; +import { UserGuildModel } from "../../db/UserGuild"; +import { raceActivityEnd } from "../timeTaskService"; +import { addActive } from "../guildService"; +import { checkTask, checkActivityTask } from "../taskService"; let gateActivityObj: GateActivityObject; let cityActivityObj: CityActivityObject; @@ -386,7 +388,7 @@ export async function sendSingleRaceActEndMsg(guildCode: string, woodenHorse: Wo export async function gateActivitySettleReward(guildCode: string, serverId: number) { console.log('gateActivitySettleReward', guildCode, serverId); let obj = getGateActivityObj(); - let { gateHp, members } = obj.getObj(guildCode, serverId); + let { members } = obj.getObj(guildCode, serverId); // console.log('***** gateHp', gateHp, 'members', members); let r = new Rank(REDIS_KEY.GATE_ACTIVITY, { serverId }, true); @@ -398,9 +400,9 @@ export async function gateActivitySettleReward(guildCode: string, serverId: numb // console.log('***** rewards', JSON.stringify(rewards)); let rec = await GuildActivityRecordModel.updateInfo(guildCode, GUILD_ACTIVITY_TYPE.GATE_ACTIVITY, { - isSuccess: gateHp > 0, + isSuccess: true, isCompleted: true, - rank, score: guildScore, remainGateHp: gateHp, + rank, score: guildScore, members, memberCnt: members.length, auctionType: AUCTION_SOURCE.GATE, rewards: rewards.map(cur => cur.goods) diff --git a/game-server/app/services/guildActivityObjService.ts b/game-server/app/services/guildActivity/raceActivityObj.ts similarity index 53% rename from game-server/app/services/guildActivityObjService.ts rename to game-server/app/services/guildActivity/raceActivityObj.ts index a3dfe1c0f..b0c66869a 100644 --- a/game-server/app/services/guildActivityObjService.ts +++ b/game-server/app/services/guildActivity/raceActivityObj.ts @@ -1,211 +1,17 @@ // 军团活动蛮夷入侵城门血量等数据存储 -import { Member, GateMembersRec, WoodenHorse, Event } from "../domain/battleField/guildActivity"; -import { GUILDACTIVITY } from "../pubUtils/dicParam"; -import { RewardInter } from "../pubUtils/interface"; -import { getRaceEventItems, gameData } from "../pubUtils/data"; -import { GuildModel } from "../db/Guild"; +import { Member, GateMembersRec, WoodenHorse, Event } from "../../domain/battleField/guildActivity"; +import { RewardInter } from "../../pubUtils/interface"; +import { getRaceEventItems, gameData } from "../../pubUtils/data"; +import { GuildModel } from "../../db/Guild"; import { sendSingleRaceActEndMsg } from "./guildActivityService"; -import { REDIS_KEY, RACE_EVENT_TYPE, RACE_EVENT_EFFECT_TYPE, RACE_EVENT, STATUS, RACE_ACTIVITY_STATUS } from "../consts"; -import { getGuildChannelSid } from "./chatService"; +import { REDIS_KEY, RACE_EVENT_TYPE, RACE_EVENT_EFFECT_TYPE, RACE_EVENT, STATUS, RACE_ACTIVITY_STATUS } from "../../consts"; +import { getGuildChannelSid } from "../chatService"; import { pinus } from "pinus"; -import { getRandEelm, sortArrRandom, resResult } from "../pubUtils/util"; -import { Rank } from "./rankService"; -import { getTimeFun } from "../pubUtils/timeUtil"; - -export class GateActivityObject { - private gateHp: Map = new Map(); // 城门血条,每个军团有一条血条 guildCode => hp - private members: Map> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}] - private membersRecord: Map = new Map(); // 每个成员的回合数和敌军数,防刷 recCode => GateMembersRec - private guilds: Map = new Map(); // 参加的所有军团 server => [guildCode] - - public getObj(guildCode: string, serverId: number) { - // console.log(guildCode, serverId) - return { - gateHp: this.getGateHpAndInc(guildCode), - members: this.members.get(guildCode)||[], - memberesRecord: [...this.membersRecord], - guilds: this.guilds.get(serverId)||[] - } - } - - public getGateHpAndInc(guildCode: string, inc: number = 0) { - let gateHp = this.gateHp.get(guildCode); - if(!this.gateHp.has(guildCode)) { - gateHp = GUILDACTIVITY.GATEACTIVITY_GATEHP; - } - if(inc != 0) { - gateHp += inc; - this.gateHp.set(guildCode, gateHp); - } - if(gateHp <= 0) gateHp = 0; - return gateHp - } - - public getGuilds() { - return this.guilds; - } - - public pushMembers(guildCode: string, serverId: number, roleId: string, job: number, code: string) { - - if(this.members.has(guildCode)) { - let members = this.members.get(guildCode); - if(members.findIndex(cur => cur.roleId == roleId) == -1) { - members.push({ roleId, job, code }); - } - } else { - let arr = new Array(); - arr.push(roleId); - this.members.set(guildCode, [{ roleId, job, code }]); - } - if(this.guilds.has(serverId)) { - let arr = this.guilds.get(serverId); - if(!arr.includes(guildCode)) arr.push(guildCode); - this.guilds.set(serverId, arr); - } else { - this.guilds.set(serverId, [guildCode]); - } - - } - - public getMemberRecord(recCode: string, roleId: string) { - return this.membersRecord.get(recCode)||new GateMembersRec(roleId) - } - - public setMemberRecord(recCode: string, newMemberRecord: GateMembersRec) { - this.membersRecord.set(recCode, newMemberRecord); - } - - public delMemberRecord(recCode: string) { - this.membersRecord.delete(recCode); - } - - public delGuildRecord(guildCode: string, serverId: number) { - let guildList = this.guilds.get(serverId); - if(guildList) { - let index = guildList.indexOf(guildCode); - guildList.splice(index, 1); - } - this.members.delete(guildCode); - } -} - -// 军团诸侯混战等数据 -export class CityActivityObject { - private gateHp: Map = new Map(); // 城门血条,每个cityId有一条血条 serverId&cityId => gateHp - private members: Map> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}] - private cities: Map = new Map(); // 各个城池参与的军团 serverId&cityId => [guildCode] - private guilds: Map = new Map(); // 军团所在的城池 guildCode => cityId - private historyCity: Map = new Map(); // 获取自己打开过的城池的页面 roleId => cityId - private sentCity: string[] = []; - - private getKey(serverId: number, cityId: number) { - return `${serverId}_${cityId}`; - } - - private decodeKey(key: string) { - let arr = key.split('_'); - return { - serverId: parseInt(arr[0]), - cityId: parseInt(arr[1]) - } - } - - public getObj( serverId: number, cityId: number, guildCode: string) { - let key = this.getKey(serverId, cityId); - return { - gateHp: this.gateHp.get(key), - members: this.members.get(guildCode), - city: this.cities.get(key), - guild: this.guilds.get(guildCode) - } - } - - public getAllCities() { - let allCities = new Array<{ serverId: number, cityId: number, guildCodes: string[]}>(); - let serverlists = new Array(); - for(let [key, guildCodes] of this.cities) { - if(this.sentCity.indexOf(key) == -1) { - let { serverId, cityId } = this.decodeKey(key); - allCities.push({ serverId, cityId, guildCodes }); - if(!serverlists.includes(serverId)) serverlists.push(serverId); - } - } - return {cities: allCities, serverlists}; - } - - public getGuildsInCity(serverId: number, cityId: number) { - let key = this.getKey(serverId, cityId); - return this.cities.get(key)||[]; - } - - public getMembersOfGuild(guildCode: string) { - return this.members.get(guildCode)||[]; - } - - public getGateHpAndInc(serverId: number, cityId: number, maxHp: number, inc: number = 0) { - let key = this.getKey(serverId, cityId); - let gateHp = this.gateHp.get(key); - if(!this.gateHp.has(key)) { - gateHp = maxHp; - } - if(inc != 0) { - gateHp += inc; - this.gateHp.set(key, gateHp); - } - if(gateHp <= 0) gateHp = 0; - return gateHp - } - - public getHistoryCity(roleId: string) { - return this.historyCity.get(roleId) - } - - public setHistoryCity(roleId: string, cityId: number) { - return this.historyCity.set(roleId, cityId); - } - - - public pushMembers(guildCode: string, roleId: string, job: number, code: string) { - - if(this.members.has(guildCode)) { - let members = this.members.get(guildCode); - if(members.findIndex(cur => cur.roleId == roleId) == -1) { - members.push({ roleId, job, code }); - } - } else { - let arr = new Array(); - arr.push(roleId); - this.members.set(guildCode, [{ roleId, job, code }]); - } - } - - public pushGuild(guildCode: string, serverId: number, cityId: number) { - let key = this.getKey(serverId, cityId); - if(!this.cities.has(key)) { - this.cities.set(key, [guildCode]); - } else { - let arr = this.cities.get(key); - if(!arr.includes(guildCode)) { - arr.push(guildCode); - } - } - this.guilds.set(guildCode, cityId); - } - - public delCityRecord(cityId: number, serverId: number) { - let key = this.getKey(serverId, cityId); - // let guildCodes = this.cities.get(key)||[]; - // for(let guildCode of guildCodes) { - // this.members.delete(guildCode); - // this.guilds.delete(guildCode); - // } - // this.cities.delete(key); - this.sentCity.push(key); - } -} - +import { getRandEelm, sortArrRandom, resResult } from "../../pubUtils/util"; +import { Rank } from "../rankService"; +import { getTimeFun } from "../../pubUtils/timeUtil"; // 粮草先行 export class RaceActivityObject { @@ -407,4 +213,5 @@ export class RaceActivityObject { public hasSend(guildCode: string) { return this.hasSentGuild.indexOf(guildCode) != -1; } -} \ No newline at end of file +} + diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index a36a2f304..1d9b08128 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -12,7 +12,7 @@ import { indexOf } from 'underscore'; import { PvpSeasonResultModel } from '../db/PvpSeasonResult'; import { settleGuildWeekly } from './guildService'; import { sendMailByContent, SendMailFun } from './mailService'; -import { getGuildActivityByDic, sendEndMsgToAll, autoDeclare, sendGuildActivityStatus } from './guildActivityService'; +import { getGuildActivityByDic, sendEndMsgToAll, autoDeclare, sendGuildActivityStatus } from './guildActivity/guildActivityService'; import { sendUngotDividendJob, startGuildAuction, startWorldAuction, stopAuction } from './auctionService'; import { DicGuildActivity } from '../pubUtils/dictionary/DicGuildActivity'; import { dispatch } from '../pubUtils/dispatcher'; diff --git a/shared/db/UserGuildActivityRec.ts b/shared/db/UserGuildActivityRec.ts index 20d11aaae..2e78204c3 100644 --- a/shared/db/UserGuildActivityRec.ts +++ b/shared/db/UserGuildActivityRec.ts @@ -78,6 +78,8 @@ export default class UserGuildActivityRec extends BaseModel { record: Record[]; // 个人总军功 @prop({ required: true }) round: number; // 回合数 + @prop({ required: true }) + gateHp: number; // 最终城门血量 // 诸侯混战字段 @prop({ required: true, default: 0 })