✨ 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, 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, VESTIGE_OPP_STATUS, VESTIGE_STATUS, WAR_TYPE } from "../../../consts";
|
||||
import { BattleRecordModel } from "../../../db/BattleRecord";
|
||||
import { GVGLeagueModel } from "../../../db/GVGLeague";
|
||||
import { GVGUserItemModel } from "../../../db/GVGUserItem";
|
||||
@@ -8,7 +8,8 @@ import { GVGVestigeRankModel } from "../../../db/GVGVestigeRank";
|
||||
import { GVGVestigeRecModel, GVGVestigeRecUpdate } from "../../../db/GVGVestigeRec";
|
||||
import { HeroModel } from "../../../db/Hero";
|
||||
import { RoleModel } from "../../../db/Role";
|
||||
import { GVGVestigeOppLineup } from "../../../domain/gvgField/returnData";
|
||||
import { GVGVestigeOppLineup, VestigeRank } from "../../../domain/gvgField/returnData";
|
||||
import { RoleRankInfo } from "../../../domain/rank";
|
||||
import { getRemoteRplFilePath, getRemoteRplPrefix } from "../../../pubUtils/battleUtils";
|
||||
import { gameData } from "../../../pubUtils/data";
|
||||
import { GVG } from "../../../pubUtils/dicParam";
|
||||
@@ -17,8 +18,9 @@ import { isHeroHidden } from "../../../services/dataService";
|
||||
import { calBreakGoods, checkHeroIsUsedInOtherVestige, checkVestige, checkVestigeOppStatus, checkVestigeRank, generateAttackHeroInfo, generateAttackInfo, generateDefenseInfo, getOppDetailData, getOppPlayerByRanks, getVestigeRecStatus, getVestigeUsedHeroes, isRobot, refreshVestigeOppRanks, updateMyVestigeRank } from "../../../services/gvg/gvgFightService";
|
||||
import { addGVGReward, handleGVGCost } from "../../../services/gvg/gvgItemService";
|
||||
import { addGVGActive } from "../../../services/gvg/gvgPrepareService";
|
||||
import { getGroupIdOfServer, getGVGPeriodData } from "../../../services/gvg/gvgService";
|
||||
import { getGroupIdOfServer, getGVGPeriodData, getGVGServerType } from "../../../services/gvg/gvgService";
|
||||
import { checkBattleHeroesByHid } from "../../../services/normalBattleService";
|
||||
import { Rank } from "../../../services/rankService";
|
||||
import { getAllServerName } from "../../../services/redisService";
|
||||
|
||||
export default function (app: Application) {
|
||||
@@ -45,6 +47,8 @@ export class GVGProduceHandler {
|
||||
return resResult(STATUS.GVG_VESTIGE_ERR);
|
||||
}
|
||||
let groupId = await getGroupIdOfServer(serverId);
|
||||
let serverType = await getGVGServerType(serverId);
|
||||
|
||||
let dicRankMap = gameData.gvgVestige.get(vestigeId);
|
||||
if(!dicRankMap) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
@@ -52,13 +56,13 @@ export class GVGProduceHandler {
|
||||
if(!myVestigeRank) {
|
||||
let role = await RoleModel.findByRoleId(roleId, 'roleId');
|
||||
let oppRanks = refreshVestigeOppRanks(-1);
|
||||
myVestigeRank = await GVGVestigeRankModel.initRank(configId, vestigeId, groupId, role, oppRanks );
|
||||
myVestigeRank = await GVGVestigeRankModel.initRank(configId, vestigeId, groupId, serverType, role, oppRanks );
|
||||
}
|
||||
let { rank, lineup, oppRanks, refreshCnt } = myVestigeRank;
|
||||
let score = dicRankMap?.get(rank)||0;
|
||||
|
||||
let lineupCe = lineup.reduce((pre, cur) => pre + cur.ce, 0);
|
||||
let oppPlayers = await getOppPlayerByRanks(serverId, groupId, vestigeId, oppRanks);
|
||||
let oppPlayers = await getOppPlayerByRanks(serverId, groupId, serverType, vestigeId, oppRanks);
|
||||
let usedHeroes = await getVestigeUsedHeroes(roleId, vestigeId);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
@@ -82,12 +86,13 @@ export class GVGProduceHandler {
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
let groupId = await getGroupIdOfServer(serverId);
|
||||
let serverType = await getGVGServerType(serverId);
|
||||
|
||||
let myVestigeRank = await GVGVestigeRankModel.findByRole(vestigeId, roleId); // 我在这个遗迹的排名
|
||||
if(!myVestigeRank) {
|
||||
let role = await RoleModel.findByRoleId(roleId, 'roleId');
|
||||
let oppRanks = refreshVestigeOppRanks(-1);
|
||||
myVestigeRank = await GVGVestigeRankModel.initRank(configId, vestigeId, groupId, role, oppRanks );
|
||||
myVestigeRank = await GVGVestigeRankModel.initRank(configId, vestigeId, groupId, serverType, role, oppRanks );
|
||||
}
|
||||
|
||||
for(let { actorId } of heroes) {
|
||||
@@ -155,12 +160,13 @@ export class GVGProduceHandler {
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
let groupId = await getGroupIdOfServer(serverId);
|
||||
let serverType = await getGVGServerType(serverId);
|
||||
|
||||
let myVestigeRank = await GVGVestigeRankModel.findByRole(vestigeId, roleId); // 我在这个遗迹的排名
|
||||
if(!myVestigeRank) {
|
||||
let role = await RoleModel.findByRoleId(roleId, 'roleId');
|
||||
let oppRanks = refreshVestigeOppRanks(-1);
|
||||
myVestigeRank = await GVGVestigeRankModel.initRank(configId, vestigeId, groupId, role, oppRanks );
|
||||
myVestigeRank = await GVGVestigeRankModel.initRank(configId, vestigeId, groupId, serverType, role, oppRanks );
|
||||
}
|
||||
|
||||
let refreshCnt = myVestigeRank.refreshCnt||0;
|
||||
@@ -169,7 +175,7 @@ export class GVGProduceHandler {
|
||||
let oppRanks = refreshVestigeOppRanks(myVestigeRank.rank);
|
||||
myVestigeRank = await GVGVestigeRankModel.refreshOpp(roleId, vestigeId, oppRanks );
|
||||
|
||||
let oppPlayers = await getOppPlayerByRanks(serverId, groupId, vestigeId, myVestigeRank.oppRanks);
|
||||
let oppPlayers = await getOppPlayerByRanks(serverId, groupId, serverType, vestigeId, myVestigeRank.oppRanks);
|
||||
|
||||
// 返回
|
||||
return resResult(STATUS.SUCCESS, { vestigeId, refreshCnt: myVestigeRank.refreshCnt, oppPlayers });
|
||||
@@ -200,18 +206,19 @@ export class GVGProduceHandler {
|
||||
const hasItem = await GVGUserItemModel.checkItemCnt(configId, myLeague.leagueCode, roleId, GVG_ITEM.FIGHT_COIN, 1);
|
||||
if(!hasItem) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
|
||||
const groupId = await getGroupIdOfServer(serverId);
|
||||
let serverType = await getGVGServerType(serverId);
|
||||
|
||||
let status = await checkVestigeOppStatus(configId, groupId, vestigeId, roleId, myRank, targetRoleId, rank); // 锁
|
||||
let status = await checkVestigeOppStatus(configId, groupId, serverType, vestigeId, roleId, myRank, targetRoleId, rank); // 锁
|
||||
if(status != VESTIGE_OPP_STATUS.BATTLE) {
|
||||
let oppRanks = refreshVestigeOppRanks(myRank);
|
||||
let oppPlayers = await getOppPlayerByRanks(serverId, groupId, vestigeId, oppRanks);
|
||||
let oppPlayers = await getOppPlayerByRanks(serverId, groupId, serverType, vestigeId, oppRanks);
|
||||
return resResult(STATUS.SUCCESS, { status, oppPlayers });
|
||||
}
|
||||
|
||||
// 扣征战令
|
||||
const costResult = await handleGVGCost(roleId, myLeague.leagueCode, sid, [{ id: GVG_ITEM.FIGHT_COIN, count: 1 }], [], ITEM_CHANGE_REASON.GVG_VESTIGE_START);
|
||||
if(!costResult) {
|
||||
await GVGVestigeLockModel.releaseLock(groupId, vestigeId, rank);
|
||||
await GVGVestigeLockModel.releaseLock(groupId, serverType, vestigeId, rank);
|
||||
return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
|
||||
}
|
||||
// 获取征战令对应奖励
|
||||
@@ -221,7 +228,7 @@ export class GVGProduceHandler {
|
||||
// 创建rec
|
||||
const attackInfo = await generateAttackInfo(roleId, myRank);
|
||||
const defenseInfo = await generateDefenseInfo(targetRoleId, vestigeId, rank);
|
||||
const rec = await GVGVestigeRecModel.createRec(configId, vestigeId, groupId, dicRank.warId, attackInfo, defenseInfo, leagueGoods);
|
||||
const rec = await GVGVestigeRecModel.createRec(configId, vestigeId, groupId, serverType, dicRank.warId, attackInfo, defenseInfo, leagueGoods);
|
||||
const oppDetail = await getOppDetailData(rec);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
@@ -237,7 +244,7 @@ export class GVGProduceHandler {
|
||||
// 更新ladderMatchRec
|
||||
let rec = await GVGVestigeRecModel.giveup(roleId, battleCode);
|
||||
if(rec && rec.defenseInfo) {
|
||||
await GVGVestigeLockModel.releaseLock(rec.groupId, rec.vestigeId, rec.defenseInfo.oldRank);
|
||||
await GVGVestigeLockModel.releaseLock(rec.groupId, rec.serverType, rec.vestigeId, rec.defenseInfo.oldRank);
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
@@ -283,7 +290,8 @@ export class GVGProduceHandler {
|
||||
|
||||
// 更新锁
|
||||
const groupId = await getGroupIdOfServer(serverId);
|
||||
let lock = await GVGVestigeLockModel.checkBattleLock(groupId, vestigeId, rank, roleId);
|
||||
let serverType = await getGVGServerType(serverId);
|
||||
let lock = await GVGVestigeLockModel.checkBattleLock(groupId, serverType, vestigeId, rank, roleId);
|
||||
if(!lock) return resResult(STATUS.GVG_VESTIGE_CHECK_BATTLE_STATUS_ERR);
|
||||
|
||||
// 向vestigerec保存阵容
|
||||
@@ -327,7 +335,7 @@ export class GVGProduceHandler {
|
||||
// 更新vestigeRec
|
||||
rec = await GVGVestigeRecModel.battleEnd(battleCode, isSuccess, endTime, atkData?.rank, defData?.rank||rec.attackInfo.oldRank);
|
||||
// 更新锁
|
||||
await GVGVestigeLockModel.releaseLock(rec.groupId, rec.vestigeId, rec.defenseInfo.oldRank);
|
||||
await GVGVestigeLockModel.releaseLock(rec.groupId, rec.serverType, rec.vestigeId, rec.defenseInfo.oldRank);
|
||||
// 更新battleRecord
|
||||
await BattleRecordModel.updateBattleRecordByCode(battleCode, { $set: { status: isSuccess? 1: 2 } });
|
||||
|
||||
@@ -345,7 +353,7 @@ export class GVGProduceHandler {
|
||||
score: gameData.gvgVestige.get(rec.vestigeId)?.get(atkData.rank)?.score,
|
||||
historyRank: atkData.historyRank,
|
||||
...getVestigeRecStatus(rec),
|
||||
oppPlayers: await getOppPlayerByRanks(serverId, rec.groupId, rec.vestigeId, atkData.oppRanks),
|
||||
oppPlayers: await getOppPlayerByRanks(serverId, rec.groupId, rec.serverType, rec.vestigeId, atkData.oppRanks),
|
||||
breakGoods,
|
||||
lineup: atkData.lineup,
|
||||
lineupCe: atkData.lineup.reduce((pre, cur) => pre + cur.ce, 0),
|
||||
@@ -382,6 +390,44 @@ export class GVGProduceHandler {
|
||||
|
||||
// 玩家排行
|
||||
async getPlayerRank(msg: { vestigeId: number }, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let serverId = session.get('serverId');
|
||||
|
||||
let { vestigeId } = msg;
|
||||
let groupId = await getGroupIdOfServer(serverId);
|
||||
let serverType = await getGVGServerType(serverId);
|
||||
|
||||
let dicRankMap = gameData.gvgVestige.get(vestigeId);
|
||||
let serverNames = await getAllServerName();
|
||||
let vestigeRanks = await GVGVestigeRankModel.findRankByVestige(groupId, serverType, vestigeId);
|
||||
let r = new Rank(REDIS_KEY.GVG_VESTIGE_MEMBER, { groupId, serverType, vestigeId });
|
||||
let ranks: VestigeRank[] = [], myRank: VestigeRank;
|
||||
for(let { roleId, rank, lineup } of vestigeRanks) {
|
||||
let param = <RoleRankInfo>await r.getParam(rank, roleId, [rank]);
|
||||
if(!param) {
|
||||
let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.RANK);
|
||||
await r.generParamAndSet(REDIS_KEY.USER_INFO, { roleId }, { role });
|
||||
param = <RoleRankInfo>await r.getParam(rank, roleId, [rank]);
|
||||
}
|
||||
let lineupCe = lineup.reduce((pre, cur) => pre + cur.ce, 0);
|
||||
let serverName = serverNames[param.serverId];
|
||||
let score = dicRankMap?.get(param.rank)?.score||0;
|
||||
|
||||
let obj = new VestigeRank();
|
||||
obj.setByRankParam(param, serverName, lineupCe, score);
|
||||
if(obj.roleId == roleId) myRank = obj;
|
||||
ranks.push(obj);
|
||||
}
|
||||
if(!myRank) {
|
||||
let obj = new VestigeRank();
|
||||
let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.RANK);
|
||||
obj.setByRole(role, serverNames[serverId]);
|
||||
myRank = obj;
|
||||
}
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
vestigeId,
|
||||
ranks, myRank
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ export class GVGProduceHandler {
|
||||
const { type } = msg;
|
||||
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
// if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
@@ -102,7 +102,7 @@ export class GVGProduceHandler {
|
||||
const { farmId } = msg;
|
||||
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
// if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
@@ -142,7 +142,7 @@ export class GVGProduceHandler {
|
||||
const { farmId } = msg;
|
||||
|
||||
let { period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
// if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
@@ -165,7 +165,7 @@ export class GVGProduceHandler {
|
||||
|
||||
const { farmId, seeds } = msg;
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
// if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
@@ -213,7 +213,7 @@ export class GVGProduceHandler {
|
||||
|
||||
const { farmId, fieldIds } = msg;
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
// if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
@@ -265,7 +265,7 @@ export class GVGProduceHandler {
|
||||
|
||||
const { farmId, fieldId } = msg;
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
// if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
@@ -300,7 +300,7 @@ export class GVGProduceHandler {
|
||||
if(!checkItemCanUserInFarm(farmId, itemId)) return resResult(STATUS.GVG_ITEM_CANNOT_USE);
|
||||
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
// if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
@@ -330,7 +330,7 @@ export class GVGProduceHandler {
|
||||
|
||||
const { farmId, fieldId, result } = msg;
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
// if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
@@ -387,7 +387,7 @@ export class GVGProduceHandler {
|
||||
const { farmId } = msg;
|
||||
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
// if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
@@ -427,7 +427,7 @@ export class GVGProduceHandler {
|
||||
if(!checkItemCanUserInFarm(farmId, itemId)) return resResult(STATUS.GVG_ITEM_CANNOT_USE);
|
||||
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
// if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
@@ -457,7 +457,7 @@ export class GVGProduceHandler {
|
||||
|
||||
const { farmId, fieldId, result } = msg;
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
// if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
Reference in New Issue
Block a user