✨ feat(gvg): 征战中原动态、任务、贡献
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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 };
|
||||
}));
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user