diff --git a/game-server/app/servers/guild/handler/gvgProduceHandler.ts b/game-server/app/servers/guild/handler/gvgProduceHandler.ts index 039a81b73..3bc7a72eb 100644 --- a/game-server/app/servers/guild/handler/gvgProduceHandler.ts +++ b/game-server/app/servers/guild/handler/gvgProduceHandler.ts @@ -13,7 +13,7 @@ import { nowSeconds } from "../../../pubUtils/timeUtil"; import { resResult } from "../../../pubUtils/util"; import { getGVGCities } from "../../../services/gvg/gvgBattleService"; import { addGVGReward, getProduceCoinCnt, handleGVGCost } from "../../../services/gvg/gvgItemService"; -import { addGVGActive, addResource, getCostSeedReward, getItemIdOfSeedType, getLeagueFarmShowResult, getLockFieldCnt, getmyContributeRank, rollbackUnPlantFields, lockField, calFarmOutput, sumOutputByResults, lockMineOrForestry, calMineOutput, calForestryOutput, checkItemCanUserInFarm } from "../../../services/gvg/gvgPrepareService"; +import { addGVGActive, addResource, getCostSeedReward, getItemIdOfSeedType, getLeagueFarmShowResult, getLockFieldCnt, getmyContributeRank, rollbackUnPlantFields, lockField, calFarmOutput, sumOutputByResults, lockMineOrForestry, calMineOutput, calForestryOutput, checkItemCanUserInFarm, checkResourceAndLv } from "../../../services/gvg/gvgPrepareService"; import { getGVGConfig, getGVGPeriodData } from "../../../services/gvg/gvgService"; import { sendMailByContent } from "../../../services/mailService"; import { getAllServerName, getRoleOnlineInfo } from "../../../services/redisService"; @@ -182,6 +182,7 @@ export class GVGProduceHandler { const cities = await getGVGCities(myLeague); const leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, myLeague.leagueCode); + if(!checkResourceAndLv(leaguePrepare, GVG_RESOURCE_TYPE.FOOD)) return resResult(STATUS.GVG_LV_RESOURCE); const cost: RewardInter[] = [], updateFields: { fieldId: number, seedType: number, index: number, time: number, output: number, outputStr: string }[] = []; for(let { fieldId, seedType, index } of seeds) { @@ -319,6 +320,9 @@ export class GVGProduceHandler { let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); + const leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, myLeague.leagueCode); + if(!checkResourceAndLv(leaguePrepare, GVG_RESOURCE_TYPE.MINERAL)) return resResult(STATUS.GVG_LV_RESOURCE); + const hasItem = await GVGUserItemModel.checkItemCnt(configId, myLeague.leagueCode, roleId, itemId, 1); if(!hasItem) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH); @@ -448,6 +452,9 @@ export class GVGProduceHandler { let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); + const leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, myLeague.leagueCode); + if(!checkResourceAndLv(leaguePrepare, GVG_RESOURCE_TYPE.MINERAL)) return resResult(STATUS.GVG_LV_RESOURCE); + const hasItem = await GVGUserItemModel.checkItemCnt(configId, myLeague.leagueCode, roleId, itemId, 1); if(!hasItem) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH); diff --git a/game-server/app/services/gvg/gvgPrepareService.ts b/game-server/app/services/gvg/gvgPrepareService.ts index ce33c14a8..03392d802 100644 --- a/game-server/app/services/gvg/gvgPrepareService.ts +++ b/game-server/app/services/gvg/gvgPrepareService.ts @@ -1,7 +1,7 @@ import { BackendSession } from "pinus"; import { GVG_ACTIVE_TYPE, GVG_ITEM, GVG_PERIOD, GVG_RESOURCE_TYPE, GVG_SEED_TYPE, GVG_TECH_TYPE, ITEM_CHANGE_REASON, LEAGUE_JOB, MAIL_TYPE, PUSH_ROUTE } from "../../consts"; import { GVGLeagueFarmModel, GVGLeagueFarmType } from "../../db/GVGLeagueFarm"; -import { GVGLeaguePrepareModel, Tech } from "../../db/GVGLeaguePrepare"; +import { GVGLeaguePrepareModel, GVGLeaguePrepareType, Tech } from "../../db/GVGLeaguePrepare"; import { GVGUserDailyDataModel, GVGUserDailyDataType } from "../../db/GVGUserDailyData"; import { Contribute, GVGUserDataModel } from "../../db/GVGUserData"; import { GVGUserItemModel } from "../../db/GVGUserItem"; @@ -156,6 +156,23 @@ export async function addResource(myLeague: GVGLeagueType, roleId: string, roleN return { resources: league.resources, leagueLv: league.lv, myContribute } } +export function checkResourceAndLv(gvgPrepare: GVGLeaguePrepareType, type: GVG_RESOURCE_TYPE) { + if(!gvgPrepare) return true; + let { lv, resources } = gvgPrepare; + let dicGVGLeagueLv = gameData.gvgLeagueLv.get(lv); + if(!dicGVGLeagueLv) return false; + + if(type == GVG_RESOURCE_TYPE.FOOD) { + return resources.food < dicGVGLeagueLv.food; + } else if (type == GVG_RESOURCE_TYPE.MINERAL) { + return resources.mineral < dicGVGLeagueLv.mineral; + } else if (type == GVG_RESOURCE_TYPE.WOOD) { + return resources.wood < dicGVGLeagueLv.wood; + } + + return false +} + function getResourceCnt(resourceType: GVG_RESOURCE_TYPE, count: number) { switch(resourceType) { case GVG_RESOURCE_TYPE.FOOD: diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index cb814479c..400acc70f 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -359,6 +359,7 @@ export const STATUS = { GVG_NOT_ENTER_CITY_TIME: { code: 21342, simStr: '您此时不可进入城池' }, GVG_NOT_BATTLE_TIME: { code: 21343, simStr: '您此时只能进驻据点不可挑战' }, GVG_TECH_HAS_PROGRESS: { code: 21344, simStr: '该科技进度不为0' }, + GVG_LV_RESOURCE: { code: 21345, simStr: '该联军等级下该资源已满' }, // GVG征战中原 GVG_VESTIGE_ERR: { code: 21350, simStr: '今日未开放该遗迹' }, GVG_VESTIGE_TARGET_NOT_FOUND: { code: 21351, simStr: '对手未找到' },