feat(gvg): 征战中原动态、任务、贡献

This commit is contained in:
luying
2023-02-04 18:14:34 +08:00
parent 1f083dc0fa
commit e7a62c4e3e
12 changed files with 104 additions and 29 deletions

View File

@@ -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);
}

View File

@@ -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 };
}));
}

View File

@@ -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) {