diff --git a/game-server/app/servers/guild/handler/gvgFighterHandler.ts b/game-server/app/servers/guild/handler/gvgFighterHandler.ts index dcfd7c38b..f51b229e8 100644 --- a/game-server/app/servers/guild/handler/gvgFighterHandler.ts +++ b/game-server/app/servers/guild/handler/gvgFighterHandler.ts @@ -1,5 +1,5 @@ import { Application, BackendSession, ChannelService, HandlerService, pinus } from "pinus"; -import { GVG_ACTIVE_TYPE, GVG_ITEM, GVG_PERIOD, ITEM_CHANGE_REASON, REDIS_KEY, ROLE_SELECT, STATUS, VESTIGE_OPP_STATUS, VESTIGE_STATUS, WAR_TYPE } from "../../../consts"; +import { GVG_ACTIVE_TYPE, GVG_ITEM, GVG_PERIOD, ITEM_CHANGE_REASON, REDIS_KEY, ROLE_SELECT, STATUS, TASK_TYPE, VESTIGE_OPP_STATUS, VESTIGE_STATUS, WAR_TYPE } from "../../../consts"; import { BattleRecordModel } from "../../../db/BattleRecord"; import { GVGLeagueModel } from "../../../db/GVGLeague"; import { GVGUserItemModel } from "../../../db/GVGUserItem"; @@ -20,10 +20,12 @@ import { isHeroHidden } from "../../../services/dataService"; import { calBreakGoods, checkHeroIsUsedInOtherVestige, checkVestige, checkVestigeOppStatus, checkVestigeRank, generateAttackHeroInfo, generateAttackInfo, generateDefenseInfo, getDayKeyInfo, getMyVestigeRank, getOppDetailData, getOppPlayerByRanks, getVestigeRecStatus, getVestigeRank, getVestigeUsedHeroes, isRobot, refreshVestigeOppRanks, saveScoreToRank, updateMyVestigeRank, saveVestigeRankSchedule } from "../../../services/gvg/gvgFightService"; import { addGVGReward, combinePushItem, handleGVGCost } from "../../../services/gvg/gvgItemService"; import { addGVGActive } from "../../../services/gvg/gvgPrepareService"; +import { addVestigeBattleEndRec } from "../../../services/gvg/gvgRecService"; import { getGroupIdOfServer, getGVGPeriodData, getGVGServerType } from "../../../services/gvg/gvgService"; import { checkBattleHeroesByHid } from "../../../services/normalBattleService"; import { Rank } from "../../../services/rankService"; import { getAllServerName } from "../../../services/redisService"; +import { checkGVGTask } from "../../../services/task/taskService"; export default function (app: Application) { new HandlerService(app, {}); @@ -219,11 +221,12 @@ export class GVGProduceHandler { // 消耗征战令的获得活跃 let active = await addGVGActive(myLeague.leagueCode, roleId, GVG_ACTIVE_TYPE.COST_FIGHT_COIN); // 创建rec - const attackInfo = await generateAttackInfo(roleId, myLeague.leagueCode, myRank); + const attackInfo = await generateAttackInfo(roleId, myLeague, myRank); const defenseInfo = await generateDefenseInfo(targetRoleId, vestigeId, rank); const rec = await GVGVestigeRecModel.createRec(configId, vestigeId, groupId, serverType, dicRank.warId, attackInfo, defenseInfo, leagueGoods); const oppDetail = await getOppDetailData(rec); + checkGVGTask(serverId, roleId, sid, configId, myLeague.leagueCode, TASK_TYPE.GVG_VESTIGE, { count: 1 }); return resResult(STATUS.SUCCESS, { active, ...oppDetail @@ -323,7 +326,7 @@ export class GVGProduceHandler { let historyData = await GVGVestigeRankModel.findByRole(rec.vestigeId, roleId); let historyRank = historyData?.rank||0; // 交换排名 - let { isChange, atkData, defData, endTime } = await GVGVestigeRankModel.changeRank(isSuccess, rec.attackInfo, rec.defenseInfo); + let { isChange, atkData, defData, endTime } = await GVGVestigeRankModel.changeRank(isSuccess, rec.vestigeId, rec.attackInfo, rec.defenseInfo); atkData = await updateMyVestigeRank(isChange, atkData, historyRank, rec); // 更新vestigeRec rec = await GVGVestigeRecModel.battleEnd(battleCode, isSuccess, endTime, atkData?.rank, defData?.rank||rec.attackInfo.oldRank); @@ -337,6 +340,7 @@ export class GVGProduceHandler { let breakGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, leagueRewards, rewards, ITEM_CHANGE_REASON.GVG_VESTIGE_END); await saveScoreToRank(rec); + addVestigeBattleEndRec(rec); return resResult(STATUS.SUCCESS, { vestigeId: rec.vestigeId, diff --git a/game-server/app/services/gvg/gvgFightService.ts b/game-server/app/services/gvg/gvgFightService.ts index cc4f03e4b..e4a942bc2 100644 --- a/game-server/app/services/gvg/gvgFightService.ts +++ b/game-server/app/services/gvg/gvgFightService.ts @@ -3,7 +3,9 @@ import moment = require("moment"); import { GVG_PERIOD, 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"; +import { GVGUserDataModel } from "../../db/GVGUserData"; import { GVGVestigeModel } from "../../db/GVGVestige"; import { GVGVestigeLeagueRankModel } from "../../db/GVGVestigeLeagueRank"; import { GVGVestigeLockModel } from "../../db/GVGVestigeLock"; @@ -25,6 +27,7 @@ import { getHeroesAttributes } from "../playerCeService"; import { Rank } from "../rankService"; import { findKeys, getAllServerName, redisClient } from "../redisService"; import { combinePushItem } from "./gvgItemService"; +import { addVestigeLeagueRankRec } from "./gvgRecService"; import { getGroupIdOfServer, getGVGServerType } from "./gvgService"; // 备战期的遗迹和激战期的开始结束战斗时间 @@ -195,18 +198,19 @@ export async function generateDefenseInfo(roleId: string, vestigeId: number, ran let hids = lineup.map(cur => cur.actorId); let role = await RoleModel.findByRoleId(playerVestigeData.roleId, 'roleId roleName heads head frames frame spines spine title lv'); let heroes = await HeroModel.findByHidRange(hids, playerVestigeData.roleId, 'hid skinId lv star colorStar quality ce'); + let league = await GVGLeagueModel.findByCode(playerVestigeData.leagueCode); let info = new OppPlayerInfo(); - info.initByPlayer(playerVestigeData.rank, role, playerVestigeData.leagueCode, true); + info.initByPlayer(playerVestigeData.rank, role, league, true); info.setPlayerHeroes(heroes, lineup); return info; } } -export async function generateAttackInfo(roleId: string, leagueCode: string, rank: number) { +export async function generateAttackInfo(roleId: string, league: GVGLeagueType, rank: number) { let role = await RoleModel.findByRoleId(roleId, 'roleId roleName heads head frames frame spines spine title lv'); let info = new OppPlayerInfo(); - info.initByPlayer(rank, role, leagueCode, false); + info.initByPlayer(rank, role, league, false); return info; } @@ -225,7 +229,7 @@ export async function getOppDetailData(rec: GVGVestigeRecType) { const dicWarJson = gameData.warJson.get(dicWar.dispatchJsonId); const defenseInfo = rec.defenseInfo.heroes||[]; const hids = defenseInfo.map(cur => cur.hid); - const heroes = await HeroModel.findByHidRange(hids, rec.defenseRoleId, 'hid lv quality star colorStar'); + const heroes = await HeroModel.findByHidRange(hids, rec.defenseRoleId, 'hid lv quality star colorStar skins ce'); const artifactSeids = heroes.map(hero => hero.artifact); const artifacts = await ArtifactModel.findbySeqIds(rec.defenseRoleId, artifactSeids); result.setByPlayer(dicWarJson, defenseInfo, heroes, artifacts); @@ -323,7 +327,7 @@ async function savePlayerRank(configId: number, groupId: number, serverType: num let dicRankMap = gameData.gvgVestige.get(vestigeId); let newRank = dicRankMap?.get(playerInfo.newRank)?.score||0; let oldRank = dicRankMap?.get(playerInfo.oldRank)?.score||0; - let myScore = await GVGVestigeSumRankModel.incScore(playerInfo.roleId, groupId, serverType, newRank - oldRank); + let myScore = await GVGVestigeSumRankModel.incScore(playerInfo.roleId, playerInfo.leagueCode, groupId, serverType, newRank - oldRank); let r1 = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, { serverType, groupId, day: getDayKeyInfo() }); await r1.setRankWithRoleInfo(playerInfo.roleId, myScore.score, myScore.updatedAt.getTime()); let leagueScore = await GVGVestigeLeagueRankModel.incScore(configId, playerInfo.leagueCode, groupId, serverType, newRank - oldRank); @@ -358,7 +362,9 @@ export async function getVestigeRank(redisKey: REDIS_KEY, isSimple: boolean, key return { ranks, myRank } } +// systimer 服 export async function saveVestigeRankSchedule() { + let config = await GVGConfigModel.findConfig(); let day = getDayKeyInfo(); let keys = await findKeys(`${REDIS_KEY.GVG_VESTIGE_LEAGUE}:${day}:`); for(let key of keys) { @@ -368,5 +374,9 @@ export async function saveVestigeRankSchedule() { let r = new Rank(REDIS_KEY.GVG_VESTIGE_LEAGUE, { groupId, serverType, day}); let ranks = await r.getRankByRangeRaw(); await GVGVestigeLeagueRankModel.saveRank(groupId, serverType, ranks); + await addVestigeLeagueRankRec(config.configId, ranks); } + + let playerSumRanks = await GVGVestigeSumRankModel.findAllScores(); + await GVGUserDataModel.addVestigeScores(config.configId, playerSumRanks); } \ No newline at end of file diff --git a/game-server/app/services/gvg/gvgRecService.ts b/game-server/app/services/gvg/gvgRecService.ts index af22bf02b..a63dfcd65 100644 --- a/game-server/app/services/gvg/gvgRecService.ts +++ b/game-server/app/services/gvg/gvgRecService.ts @@ -2,6 +2,8 @@ // 动态 import { GVG_REC_ID, GVG_REC_TYPE, GVG_RESOURCE_TYPE } from "../../consts"; import { GVGRecModel } from "../../db/GVGRec"; +import { GVGVestigeRecType } from "../../db/GVGVestigeRec"; +import { gameData } from "../../pubUtils/data"; import { nowSeconds } from "../../pubUtils/timeUtil"; import { getGVGConfig } from "./gvgService"; @@ -34,4 +36,32 @@ function getResourceNameByType(resourceType: GVG_RESOURCE_TYPE) { case GVG_RESOURCE_TYPE.MINERAL: return '矿物'; case GVG_RESOURCE_TYPE.WOOD: return '木堆'; } +} + +export async function addVestigeBattleEndRec(rec: GVGVestigeRecType) { + if(!rec) return; + let { configId, vestigeId } = rec; + let vestigeName = gameData.gvgVestigeName.get(vestigeId); + if(rec.defenseInfo && rec.defenseInfo.isRobot) { // 对手是机器人,驻扎动态 + let { roleId, roleName, leagueCode, newRank, isSuccess } = rec.attackInfo; + if(isSuccess) { + let params = [ roleName, vestigeName, `第${newRank}名`]; + await GVGRecModel.addRec({ roleId, leagueCode, configId, type: GVG_REC_TYPE.PREPARE, recId: GVG_REC_ID.SETTLE_POINT, createTime: nowSeconds(), params }); + } + } + if(rec.defenseInfo && !rec.defenseInfo.isRobot && rec.attackInfo.leagueCode != rec.defenseInfo.leagueCode) { + let { leagueName, newRank, isSuccess } = rec.attackInfo; + let { roleId, leagueCode, roleName } = rec.defenseInfo; + if(isSuccess) { + let params = [ roleName, vestigeName, `第${newRank}名`, leagueName]; + await GVGRecModel.addRec({ roleId, leagueCode, configId, type: GVG_REC_TYPE.PREPARE, recId: GVG_REC_ID.POINT_BE_GRAB, createTime: nowSeconds(), params }); + } + } +} + +export async function addVestigeLeagueRankRec(configId: number, ranks: { rank: number, field: string }[]) { + await GVGRecModel.addRecs(ranks.map(({ rank, field: leagueCode }) => { + let params = [ `第${rank}名`]; + return { leagueCode, configId, type: GVG_REC_TYPE.PREPARE, recId: GVG_REC_ID.VESTIGE_RANK, createTime: nowSeconds(), params }; + })); } \ No newline at end of file diff --git a/game-server/app/services/rankService.ts b/game-server/app/services/rankService.ts index 88bc28ac1..e32079b07 100644 --- a/game-server/app/services/rankService.ts +++ b/game-server/app/services/rankService.ts @@ -1182,9 +1182,9 @@ export async function setRankRedisFromDb(type: string, args?: { serverId?: numbe await saveLadderDefCeByData(rank.roleId, rank); } } else if (type == REDIS_KEY.GVG_VESTIGE_MEMBER_ALL) { - let ranks = await GVGVestigeSumRankModel.findRank(); + let ranks = await GVGVestigeSumRankModel.findRankByGroupId(); for(let { _id: { groupId, serverType }, arr, roleIds } of ranks) { - let roles = await RoleModel.findByRoleIds(roleIds, ROLE_SELECT.RANK); + let roles = await RoleModel.findByRoleIds(roleIds, ROLE_SELECT.RANK); let r = new Rank(type, { groupId, serverType, day: getDayKeyInfo() }); r.setIsInit(true); for(let { roleId, score, updatedAt } of arr) { diff --git a/shared/db/GVGUserData.ts b/shared/db/GVGUserData.ts index 553402454..1a6f7f6bf 100644 --- a/shared/db/GVGUserData.ts +++ b/shared/db/GVGUserData.ts @@ -106,6 +106,12 @@ export default class GVGUserData extends BaseModel { return result; } + 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: { 'distribute.score': score } } } } + })); + } + public static async receiveBox(configId: number, leagueCode: string, roleId: string, boxId: number) { const result: GVGUserDataType = await GVGUserDataModel.findOneAndUpdate({ configId, leagueCode, roleId }, { $push: { box: boxId }}, { new: true }).lean(); return result; diff --git a/shared/db/GVGVestigeRank.ts b/shared/db/GVGVestigeRank.ts index 5a4a2d49e..83c8ff8c2 100644 --- a/shared/db/GVGVestigeRank.ts +++ b/shared/db/GVGVestigeRank.ts @@ -104,26 +104,28 @@ export default class GVGVestigeRank extends BaseModel { await GVGVestigeRankModel.updateMany({ day: today, hasDefense: true, roleId, 'lineup.hid': hid }, { $set: { 'lineupCe.$.ce': ce } }); } - public static async changeRank(isSuccess: boolean, attackInfo: { roleId: string }, defenseInfo: { isRobot: boolean, roleId: string, oldRank: number }): Promise<{ isChange: boolean, atkData?: GVGVestigeRankType, defData?: GVGVestigeRankType, endTime: number }> { + public static async changeRank(isSuccess: boolean, vestigeId: number, attackInfo: { roleId: string }, defenseInfo: { isRobot: boolean, roleId: string, oldRank: number }): Promise<{ isChange: boolean, atkData?: GVGVestigeRankType, defData?: GVGVestigeRankType, endTime: number }> { + + let today = getZeroPoint(); const session = await mongoose.connection.startSession(); session.startTransaction() try { let newAtkData: GVGVestigeRankType, newDefData: GVGVestigeRankType, isChange = false, endTime = Date.now(); if(defenseInfo.isRobot) { - let atkData = await GVGVestigeRankModel.findOne({ roleId: attackInfo.roleId }).lean(); + let atkData = await GVGVestigeRankModel.findOne({ day: today, vestigeId, roleId: attackInfo.roleId }).lean(); if(isSuccess && atkData && (atkData.rank == 0 || atkData.rank > defenseInfo.oldRank)) { - newAtkData = await GVGVestigeRankModel.findOneAndUpdate({ roleId: attackInfo.roleId }, { $set: { rank: defenseInfo.oldRank, oldRank: atkData.rank } }, { new: true, session }).lean(); + newAtkData = await GVGVestigeRankModel.findOneAndUpdate({ day: today, vestigeId, roleId: attackInfo.roleId }, { $set: { rank: defenseInfo.oldRank, oldRank: atkData.rank } }, { new: true, session }).lean(); isChange = true; endTime = Date.now(); } else { newAtkData = atkData; } } else { - let atkData = await GVGVestigeRankModel.findOne({ roleId: attackInfo.roleId }).lean(); - let defData = await GVGVestigeRankModel.findOne({ roleId: defenseInfo.roleId }).lean(); + let atkData = await GVGVestigeRankModel.findOne({ day: today, vestigeId, roleId: attackInfo.roleId }).lean(); + let defData = await GVGVestigeRankModel.findOne({ day: today, vestigeId, roleId: defenseInfo.roleId }).lean(); if(isSuccess && atkData && defData && (atkData.rank == 0 || atkData.rank > defData.rank)) { - newAtkData = await GVGVestigeRankModel.findOneAndUpdate({ roleId: attackInfo.roleId }, { $set: { rank: defData.rank, oldRank: atkData.rank } }, { new: true, session }).lean(); - newDefData = await GVGVestigeRankModel.findOneAndUpdate({ roleId: defenseInfo.roleId }, { $set: { rank: atkData.rank, oldRank: defData.rank } }, { new: true, session }).lean(); + newAtkData = await GVGVestigeRankModel.findOneAndUpdate({ day: today, vestigeId, roleId: attackInfo.roleId }, { $set: { rank: defData.rank, oldRank: atkData.rank } }, { new: true, session }).lean(); + newDefData = await GVGVestigeRankModel.findOneAndUpdate({ day: today, vestigeId, roleId: defenseInfo.roleId }, { $set: { rank: atkData.rank, oldRank: defData.rank } }, { new: true, session }).lean(); isChange = true; endTime = Date.now(); } else { diff --git a/shared/db/GVGVestigeSumRank.ts b/shared/db/GVGVestigeSumRank.ts index 187ecd443..0e33be8ee 100644 --- a/shared/db/GVGVestigeSumRank.ts +++ b/shared/db/GVGVestigeSumRank.ts @@ -12,6 +12,9 @@ export default class GVGVestigeSumRank extends BaseModel { @prop({ required: true }) roleId: string; // 玩家id + @prop({ required: true }) + leagueCode: string; // 联军id + @prop({ required: true }) groupId: number; // 战区id @@ -21,26 +24,36 @@ export default class GVGVestigeSumRank extends BaseModel { @prop({ required: true }) score: number; // 得分 - public static async incScore(roleId: string, groupId: number, serverType: number, inc: number) { + public static async incScore(roleId: string, leagueCode: string, groupId: number, serverType: number, inc: number) { let today = getZeroPoint(); let result: GVGVestigeSumRankType = await GVGVestigeSumRankModel.findOneAndUpdate({ - day: today, groupId, serverType, roleId + day: today, groupId, serverType, roleId, leagueCode }, { $inc: { score: inc } }, { new: true, upsert: true }).lean(); return result; } // 排行榜 - public static async findRank(): Promise<{ _id: { groupId: number, serverType: number }, arr: { roleId: string, score: number, updatedAt: Date }[], roleIds: string[] }[]> { + public static async findRankByGroupId(): Promise<{ _id: { groupId: number, serverType: number }, arr: { roleId: string, score: number, updatedAt: Date }[], roleIds: string[] }[]> { let today = getZeroPoint(); let ranks = await GVGVestigeSumRankModel.aggregate([ { $match: { day: today } }, { $group: { _id: { groupId: "$groupId", serverType: "$serverType" }, - arr: { $push: { roleId: "$roleId", score: "$score", updatedAt: "$updatedAt" } }, roleIds: { $addToSet: "$roleId" } + arr: { $push: { roleId: "$roleId", score: "$score", updatedAt: "$updatedAt", leagueCode: "$leagueCode" } }, roleIds: { $addToSet: "$roleId" } }}, ]); return ranks; } + + // 用于快照玩家的得分 + public static async findAllScores() { + let today = getZeroPoint(); + let ranks: GVGVestigeSumRankType[] = await GVGVestigeSumRankModel.aggregate([ + { $match: { day: today } }, + { $project: { roleId: 1, score: 1, leagueCode: 1 } } + ]); + return ranks; + } } export const GVGVestigeSumRankModel = getModelForClass(GVGVestigeSumRank); diff --git a/shared/domain/gvgField/gvgDb.ts b/shared/domain/gvgField/gvgDb.ts index 37ac798fc..79a83eab7 100644 --- a/shared/domain/gvgField/gvgDb.ts +++ b/shared/domain/gvgField/gvgDb.ts @@ -1,5 +1,6 @@ import { prop } from "@typegoose/typegoose"; import { ArtifactModelType } from "../../db/Artifact"; +import { GVGLeagueType } from "../../db/GVGLeague"; import { GVGVestigeRecType } from "../../db/GVGVestigeRec"; import { HeroType, Talent } from "../../db/Hero"; import { RoleType } from "../../db/Role"; @@ -75,6 +76,8 @@ export class OppPlayerInfo { @prop({ required: true }) roleName: string = GVG.GVG_ROBOT_NAME; // 角色 名 @prop({ required: true }) + leagueName: string = ''; // 联军名 + @prop({ required: true }) leagueCode: string = ''; // 联军id @prop({ required: true, default: 0 }) lv: number = 1; // 等级 @@ -95,7 +98,7 @@ export class OppPlayerInfo { @prop({ required: true }) isRobot: boolean = false; // 原排名 - initByPlayer(rank: number, role: RoleType, leagueCode: string, isSuccess: boolean ) { + initByPlayer(rank: number, role: RoleType, league: GVGLeagueType, isSuccess: boolean ) { this.oldRank = rank; this.newRank = rank; this.roleId = role.roleId; @@ -107,7 +110,8 @@ export class OppPlayerInfo { this.lv = role.lv; this.isSuccess = isSuccess; this.isRobot = false; - this.leagueCode = leagueCode; + this.leagueCode = league.leagueCode; + this.leagueName = league.name; } setPlayerHeroes(heroes: HeroType[], lineup: {actorId: number, dataId: number, order: number}[]) { @@ -228,6 +232,7 @@ export class OppDetailData{ setByPlayer(dicWarJson: DicWarJson[], defenseHeroes: OppPlayerHeroInfo[], heroes: HeroType[], artifacts: ArtifactModelType[]) { for(let warJson of dicWarJson) { let defenseHero = defenseHeroes.find(cur => cur.dataId == warJson.dataId); + if(!defenseHero) continue; let curHero = heroes.find(cur => cur.hid == defenseHero.hid); let hero = new OppDetailHeroData(warJson, defenseHero, curHero, artifacts); this.heroes.push(hero); diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index 13de4d9d9..755f272e6 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -127,7 +127,7 @@ import { dicGVGContributeBox, loadGVGContributeBox } from './dictionary/DicGVGCo import { dicGVGArea, dicGVGCity, loadGVGArea } from './dictionary/DicGVGArea'; import { dicGVGCityAdd, loadGVGCityAdd } from './dictionary/DicGVGCityAdd'; import { dicGVGTask, dicGVGTaskByType, loadGVGTask } from './dictionary/DicGVGTask'; -import { dicGVGVestigeByType, loadGVGVestigeType } from './dictionary/DicGVGVestigeType'; +import { dicGVGVestigeByType, dicGVGVestigeName, loadGVGVestigeType } from './dictionary/DicGVGVestigeType'; import { dicGVGVestige, loadGVGVestige } from './dictionary/DicGVGVestige'; import { DicGVGVestigeRange, dicGVGVestigeRange, loadGVGVestigeRange } from './dictionary/DicGVGVestigeRange'; import { DicGVGVestigeLeagueRank, dicGVGVestigeLeagueRank, loadGVGVestigeLeagueRank } from "./dictionary/DicGVGVestigeLeagueRank"; @@ -329,6 +329,7 @@ export const gameData = { gvgVestige: dicGVGVestige, gvgVestigeRange: dicGVGVestigeRange, gvgVestigeLeagueRank: dicGVGVestigeLeagueRank, + gvgVestigeName: dicGVGVestigeName, }; // 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据 diff --git a/shared/pubUtils/dicParam.ts b/shared/pubUtils/dicParam.ts index 79cfd0518..697134de5 100644 --- a/shared/pubUtils/dicParam.ts +++ b/shared/pubUtils/dicParam.ts @@ -376,7 +376,7 @@ export const GVG = { GVG_LEAGUE_COMPOSE: 3, // 一个联军有最多多少军团组成 GVG_CROSS_SERVICE_STARTTIME: 4, // 开服几周后开始跨服玩法 GVG_ROLE_TOTAL_RATIO: 1.2, // 贤臣+猛将总人数上限系数 - GVG_ROLE_RATIO: 1.2, // 贤臣/猛将各职能选择人数上限系数 + GVG_ROLE_RATIO: 1, // 贤臣/猛将各职能选择人数上限系数 GVG_PRODUCER_GET: '10&4|11&2', // 贤臣每天发多少令 GVG_FIGHTER_GET: '10&2|11&4', // 猛将每天发多少令 GVG_LEAGUE_TECH_LIST: 3, // 科技树解锁队列数量 @@ -394,7 +394,9 @@ export const GVG = { GVG_FIELD_TYPE_RATIO: '1&5%|2&10%|3&10%', // 全联盟的特殊格子上限百分比(a%的格子为小麦这个)1&a|2&b|3&c GVG_SP_FIELD_RATIO: '10%&30%', // 分配给玩家的时候有多少特殊格子 min&max 填最大最小百分比即可 GVG_REFRESH_TIME: 5, // 0 - GVG_ROBOT_NAME: '遗迹守护者', // 0, - GVG_VESTIGE_PREPARE_COUNTDOWN: 120, // - GVG_VESTIGE_BATTLE_COUNTDOWN: 300, // + GVG_ROBOT_NAME: '遗迹守卫', // 0 + GVG_SINGLE_SERVICE_CITY: '1&2&3', // 单服城池 + GVG_CROSS_SERVICE_CITY: '4&5&6&7&8&9&10&11&12&13', // 跨服城池 + GVG_VESTIGE_PREPARE_COUNTDOWN: 120, // 遗迹准备界面倒计时(s) + GVG_VESTIGE_BATTLE_COUNTDOWN: 300, // 遗迹战斗界面倒计时(s) }; diff --git a/shared/pubUtils/dictionary/DicGVGVestigeType.ts b/shared/pubUtils/dictionary/DicGVGVestigeType.ts index 82c8b7c74..981caea01 100644 --- a/shared/pubUtils/dictionary/DicGVGVestigeType.ts +++ b/shared/pubUtils/dictionary/DicGVGVestigeType.ts @@ -14,6 +14,7 @@ export interface DicGVGVestigeType { } export const dicGVGVestigeByType = new Map(); // 地图类型 => 遗迹id +export const dicGVGVestigeName = new Map(); // 遗迹地图名 export function loadGVGVestigeType() { dicGVGVestigeByType.clear(); @@ -26,6 +27,7 @@ export function loadGVGVestigeType() { } dicGVGVestigeByType.get(type)?.push(o); } + dicGVGVestigeName.set(o.vestigeId, o.name); }); arr = undefined; } \ No newline at end of file diff --git a/shared/resource/jsons/dic_email_content.json b/shared/resource/jsons/dic_email_content.json index 3e802dbae..f58fb879a 100644 --- a/shared/resource/jsons/dic_email_content.json +++ b/shared/resource/jsons/dic_email_content.json @@ -269,7 +269,7 @@ "id": 38, "title": "&", "sendName": "您忠诚的小跟班", - "content": "帮收", + "content": "亲爱的主公,联军伙伴们已帮忙收取您在领地农田中的成熟粮食,您的种植奖励已发送至邮箱,请查收", "time": 720 } ] \ No newline at end of file