diff --git a/game-server/app/servers/guild/handler/gvgProduceHandler.ts b/game-server/app/servers/guild/handler/gvgProduceHandler.ts index 64aa62b2a..ddf870296 100644 --- a/game-server/app/servers/guild/handler/gvgProduceHandler.ts +++ b/game-server/app/servers/guild/handler/gvgProduceHandler.ts @@ -227,7 +227,7 @@ export class GVGProduceHandler { // 计算产量 const { foodSum, rewardSum, leagueRewardSum, activeSum } = await sumOutputByResults(myResultFields); // 资源 - let resourceResult = await addResource(myLeague, roleId, roleName, GVG_RESOURCE_TYPE.FOOD, foodSum)||{}; + let resourceResult = await addResource(myLeague, roleId, roleName, GVG_RESOURCE_TYPE.FOOD, foodSum, sid)||{}; // 相关物品 let leagueGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, leagueRewardSum, rewardSum, ITEM_CHANGE_REASON.HARVEST) // 活跃 @@ -370,7 +370,7 @@ export class GVGProduceHandler { let { reward, leagueReward, leagueConsume } = dicGVGItem; let produceCoin = getProduceCoinCnt(leagueConsume); // 资源 - let resourceResult = await addResource(myLeague, roleId, roleName, GVG_RESOURCE_TYPE.MINERAL, output)||{}; + let resourceResult = await addResource(myLeague, roleId, roleName, GVG_RESOURCE_TYPE.MINERAL, output, sid)||{}; // 相关物品 let leagueGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, leagueReward, reward, ITEM_CHANGE_REASON.HARVEST) // 活跃 @@ -493,7 +493,7 @@ export class GVGProduceHandler { let { reward, leagueReward, leagueConsume } = dicGVGItem; let produceCoin = getProduceCoinCnt(leagueConsume); // 资源 - let resourceResult = await addResource(myLeague, roleId, roleName, GVG_RESOURCE_TYPE.WOOD, output)||{}; + let resourceResult = await addResource(myLeague, roleId, roleName, GVG_RESOURCE_TYPE.WOOD, output, sid)||{}; // 相关物品 let leagueGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, leagueReward, reward, ITEM_CHANGE_REASON.HARVEST) // 活跃 @@ -513,6 +513,7 @@ export class GVGProduceHandler { // 获取资源 async debugAddResource(msg: { type: number, count: number }, session: BackendSession) { const roleId = session.get('roleId'); + const sid = session.get('sid'); const roleName = session.get('roleName'); const guildCode = session.get('guildCode'); const { type, count } = msg; @@ -520,7 +521,7 @@ export class GVGProduceHandler { let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); - let resourceResult = await addResource(myLeague, roleId, roleName, type, count); + let resourceResult = await addResource(myLeague, roleId, roleName, type, count, sid); if(!resourceResult) return resResult(STATUS.WRONG_PARMS); return resResult(STATUS.SUCCESS, resourceResult); diff --git a/game-server/app/services/gvg/gvgFightService.ts b/game-server/app/services/gvg/gvgFightService.ts index 490f427e0..58679e2ed 100644 --- a/game-server/app/services/gvg/gvgFightService.ts +++ b/game-server/app/services/gvg/gvgFightService.ts @@ -1,7 +1,7 @@ // 征战中原相关 import moment = require("moment"); -import { GVG_PERIOD, GVG_RETURN_ITEM_TYPE, ITEM_CHANGE_REASON, MAIL_TYPE, REDIS_KEY, VESTIGE_OPP_STATUS, VESTIGE_STATUS } from "../../consts"; +import { GVG_PERIOD, GVG_RETURN_ITEM_TYPE, ITEM_CHANGE_REASON, LEAGUE_JOB, MAIL_TYPE, PUSH_ROUTE, REDIS_KEY, VESTIGE_OPP_STATUS, VESTIGE_STATUS } from "../../consts"; import { ArtifactModel } from "../../db/Artifact"; import { GVGConfigModel } from "../../db/GVGConfig"; import { GVGLeagueModel, GVGLeagueType } from "../../db/GVGLeague"; @@ -25,10 +25,12 @@ import { getRandEelm } from "../../pubUtils/util"; import { getNumberArr, uniqueArr } from "../ladderService"; import { sendMailByContent } from "../mailService"; import { getHeroesAttributes } from "../playerCeService"; +import { sendMessageToUserWithSuc } from "../pushService"; import { Rank } from "../rankService"; import { findKeys, getAllServerName, redisClient } from "../redisService"; import { isDevelopEnv } from "../utilService"; import { addGVGReward, combinePushItem } from "./gvgItemService"; +import { calFighterContribute } from "./gvgPrepareService"; import { addVestigeLeagueRankRec, addVestigeRankMessage } from "./gvgRecService"; import { getGroupIdOfServer, getGroupKey, getGVGServerType, getPeriodByTime } from "./gvgService"; @@ -434,7 +436,10 @@ export async function saveVestigeRankSchedule() { await GVGVestigeSumRankModel.saveRank(groupKey, ranks); } let playerSumRanks = await GVGVestigeSumRankModel.findAllScores(); - await GVGUserDataModel.addVestigeScores(config.configId, playerSumRanks); + let userDatas = await GVGUserDataModel.addVestigeScores(config.configId, playerSumRanks); + for(let userData of userDatas) { + await sendMessageToUserWithSuc(userData.roleId, PUSH_ROUTE.GVG_CONTRIBUTE_UPDATE, { leagueCode: userData.leagueCode, job: LEAGUE_JOB.FIGHTER, sumContribute: calFighterContribute(userData.contribute) }); + } } // systimer 服,每周六5点 diff --git a/game-server/app/services/gvg/gvgPrepareService.ts b/game-server/app/services/gvg/gvgPrepareService.ts index ac4a756ec..e1e09d899 100644 --- a/game-server/app/services/gvg/gvgPrepareService.ts +++ b/game-server/app/services/gvg/gvgPrepareService.ts @@ -16,7 +16,7 @@ import { getGVGConfig, getGVGPeriodData } from "./gvgService"; import { GVGVestigeRankModel } from "../../db/GVGVestigeRank"; import { addLeagueLvUpMessage, addResourceRecord } from "./gvgRecService"; import { GVGLeagueType } from "../../db/GVGLeague"; -import { sendMessageToGuildWithSuc } from "../pushService"; +import { sendMessageToGuildWithSuc, sendMessageToUserWithSuc } from "../pushService"; import { sendMailByContent } from "../mailService"; export function checkPreTech(techId: number, activeQueue: number[], techQueue: Tech[]) { @@ -118,7 +118,7 @@ export function getMyContribute(userDailyData: GVGUserDailyDataType, myRanks: {v * @param count 数量 * @returns */ -export async function addResource(myLeague: GVGLeagueType, roleId: string, roleName: string, resourceType: GVG_RESOURCE_TYPE, count: number) { +export async function addResource(myLeague: GVGLeagueType, roleId: string, roleName: string, resourceType: GVG_RESOURCE_TYPE, count: number, sid?: string) { let { leagueCode } = myLeague; let { configId } = getGVGConfig(); let resources = getResourceCnt(resourceType, count); @@ -140,6 +140,7 @@ export async function addResource(myLeague: GVGLeagueType, roleId: string, roleN let myContribute = getMyContribute(userDailyData, myRanks); addResourceRecord(roleId, roleName, leagueCode, resourceType, count); if(lv > originLv) addLeagueLvUpMessage(roleId, roleName, myLeague, lv); + await sendMessageToUserWithSuc(roleId, PUSH_ROUTE.GVG_CONTRIBUTE_UPDATE, { leagueCode, job: LEAGUE_JOB.PRODUCER, sumContribute: calProducerContribute(myContribute) }, sid); return { resources: league.resources, leagueLv: league.lv, myContribute } } diff --git a/shared/consts/constModules/chatConst.ts b/shared/consts/constModules/chatConst.ts index 9b597b1fa..ad596cf0d 100644 --- a/shared/consts/constModules/chatConst.ts +++ b/shared/consts/constModules/chatConst.ts @@ -204,4 +204,5 @@ export const PUSH_ROUTE = { GVG_PLAYER_LEAVE_AREA: 'onPlayerLeaveArea', // 积分点上的驻守人变更 GVG_CITY_RANK_UPDATE: 'onGVGCityRankUpdate', // 城池积分排名 GVG_SPINE_ATTACKED: 'onSpinesAttacked', // 4.7 队伍在地图上受到攻击 + GVG_CONTRIBUTE_UPDATE: 'onGVGContributeUpdate', // 贡献更新 } \ No newline at end of file diff --git a/shared/db/GVGUserData.ts b/shared/db/GVGUserData.ts index fc4ec1b81..4b69242dc 100644 --- a/shared/db/GVGUserData.ts +++ b/shared/db/GVGUserData.ts @@ -115,9 +115,12 @@ export default class GVGUserData extends BaseModel { } public static async addVestigeScores(configId: number, memberScores: { leagueCode: string, roleId: string, score: number }[]) { - await GVGUserDataModel.bulkWrite(memberScores.map(({ leagueCode, roleId, score }) => { - return { updateOne: { filter: { configId, leagueCode, roleId }, update: { $inc: { 'contribute.score': score } } } } - })); + let result: GVGUserDataType[] = []; + for(let { leagueCode, roleId, score } of memberScores) { + let data: GVGUserDataType = await GVGUserDataModel.findOneAndUpdate({ configId, leagueCode, roleId }, { $inc: { 'contribute.score': score } }, { new: true }).lean(); + if(data) result.push(data); + } + return result; } public static async receiveBox(configId: number, leagueCode: string, roleId: string, boxId: number) {