✨ feat(gvg): 玩家驻扎排行榜
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { Application, BackendSession, ChannelService, HandlerService, pinus } from "pinus";
|
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 { BattleRecordModel } from "../../../db/BattleRecord";
|
||||||
import { GVGLeagueModel } from "../../../db/GVGLeague";
|
import { GVGLeagueModel } from "../../../db/GVGLeague";
|
||||||
import { GVGUserItemModel } from "../../../db/GVGUserItem";
|
import { GVGUserItemModel } from "../../../db/GVGUserItem";
|
||||||
@@ -8,7 +8,8 @@ import { GVGVestigeRankModel } from "../../../db/GVGVestigeRank";
|
|||||||
import { GVGVestigeRecModel, GVGVestigeRecUpdate } from "../../../db/GVGVestigeRec";
|
import { GVGVestigeRecModel, GVGVestigeRecUpdate } from "../../../db/GVGVestigeRec";
|
||||||
import { HeroModel } from "../../../db/Hero";
|
import { HeroModel } from "../../../db/Hero";
|
||||||
import { RoleModel } from "../../../db/Role";
|
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 { getRemoteRplFilePath, getRemoteRplPrefix } from "../../../pubUtils/battleUtils";
|
||||||
import { gameData } from "../../../pubUtils/data";
|
import { gameData } from "../../../pubUtils/data";
|
||||||
import { GVG } from "../../../pubUtils/dicParam";
|
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 { 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 { addGVGReward, handleGVGCost } from "../../../services/gvg/gvgItemService";
|
||||||
import { addGVGActive } from "../../../services/gvg/gvgPrepareService";
|
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 { checkBattleHeroesByHid } from "../../../services/normalBattleService";
|
||||||
|
import { Rank } from "../../../services/rankService";
|
||||||
import { getAllServerName } from "../../../services/redisService";
|
import { getAllServerName } from "../../../services/redisService";
|
||||||
|
|
||||||
export default function (app: Application) {
|
export default function (app: Application) {
|
||||||
@@ -45,6 +47,8 @@ export class GVGProduceHandler {
|
|||||||
return resResult(STATUS.GVG_VESTIGE_ERR);
|
return resResult(STATUS.GVG_VESTIGE_ERR);
|
||||||
}
|
}
|
||||||
let groupId = await getGroupIdOfServer(serverId);
|
let groupId = await getGroupIdOfServer(serverId);
|
||||||
|
let serverType = await getGVGServerType(serverId);
|
||||||
|
|
||||||
let dicRankMap = gameData.gvgVestige.get(vestigeId);
|
let dicRankMap = gameData.gvgVestige.get(vestigeId);
|
||||||
if(!dicRankMap) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
if(!dicRankMap) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||||
|
|
||||||
@@ -52,13 +56,13 @@ export class GVGProduceHandler {
|
|||||||
if(!myVestigeRank) {
|
if(!myVestigeRank) {
|
||||||
let role = await RoleModel.findByRoleId(roleId, 'roleId');
|
let role = await RoleModel.findByRoleId(roleId, 'roleId');
|
||||||
let oppRanks = refreshVestigeOppRanks(-1);
|
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 { rank, lineup, oppRanks, refreshCnt } = myVestigeRank;
|
||||||
let score = dicRankMap?.get(rank)||0;
|
let score = dicRankMap?.get(rank)||0;
|
||||||
|
|
||||||
let lineupCe = lineup.reduce((pre, cur) => pre + cur.ce, 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);
|
let usedHeroes = await getVestigeUsedHeroes(roleId, vestigeId);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, {
|
return resResult(STATUS.SUCCESS, {
|
||||||
@@ -82,12 +86,13 @@ export class GVGProduceHandler {
|
|||||||
let { configId, period } = getGVGPeriodData();
|
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 groupId = await getGroupIdOfServer(serverId);
|
let groupId = await getGroupIdOfServer(serverId);
|
||||||
|
let serverType = await getGVGServerType(serverId);
|
||||||
|
|
||||||
let myVestigeRank = await GVGVestigeRankModel.findByRole(vestigeId, roleId); // 我在这个遗迹的排名
|
let myVestigeRank = await GVGVestigeRankModel.findByRole(vestigeId, roleId); // 我在这个遗迹的排名
|
||||||
if(!myVestigeRank) {
|
if(!myVestigeRank) {
|
||||||
let role = await RoleModel.findByRoleId(roleId, 'roleId');
|
let role = await RoleModel.findByRoleId(roleId, 'roleId');
|
||||||
let oppRanks = refreshVestigeOppRanks(-1);
|
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) {
|
for(let { actorId } of heroes) {
|
||||||
@@ -155,12 +160,13 @@ export class GVGProduceHandler {
|
|||||||
let { configId, period } = getGVGPeriodData();
|
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 groupId = await getGroupIdOfServer(serverId);
|
let groupId = await getGroupIdOfServer(serverId);
|
||||||
|
let serverType = await getGVGServerType(serverId);
|
||||||
|
|
||||||
let myVestigeRank = await GVGVestigeRankModel.findByRole(vestigeId, roleId); // 我在这个遗迹的排名
|
let myVestigeRank = await GVGVestigeRankModel.findByRole(vestigeId, roleId); // 我在这个遗迹的排名
|
||||||
if(!myVestigeRank) {
|
if(!myVestigeRank) {
|
||||||
let role = await RoleModel.findByRoleId(roleId, 'roleId');
|
let role = await RoleModel.findByRoleId(roleId, 'roleId');
|
||||||
let oppRanks = refreshVestigeOppRanks(-1);
|
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;
|
let refreshCnt = myVestigeRank.refreshCnt||0;
|
||||||
@@ -169,7 +175,7 @@ export class GVGProduceHandler {
|
|||||||
let oppRanks = refreshVestigeOppRanks(myVestigeRank.rank);
|
let oppRanks = refreshVestigeOppRanks(myVestigeRank.rank);
|
||||||
myVestigeRank = await GVGVestigeRankModel.refreshOpp(roleId, vestigeId, oppRanks );
|
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 });
|
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);
|
const hasItem = await GVGUserItemModel.checkItemCnt(configId, myLeague.leagueCode, roleId, GVG_ITEM.FIGHT_COIN, 1);
|
||||||
if(!hasItem) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
|
if(!hasItem) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
|
||||||
const groupId = await getGroupIdOfServer(serverId);
|
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) {
|
if(status != VESTIGE_OPP_STATUS.BATTLE) {
|
||||||
let oppRanks = refreshVestigeOppRanks(myRank);
|
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 });
|
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);
|
const costResult = await handleGVGCost(roleId, myLeague.leagueCode, sid, [{ id: GVG_ITEM.FIGHT_COIN, count: 1 }], [], ITEM_CHANGE_REASON.GVG_VESTIGE_START);
|
||||||
if(!costResult) {
|
if(!costResult) {
|
||||||
await GVGVestigeLockModel.releaseLock(groupId, vestigeId, rank);
|
await GVGVestigeLockModel.releaseLock(groupId, serverType, vestigeId, rank);
|
||||||
return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
|
return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
// 获取征战令对应奖励
|
// 获取征战令对应奖励
|
||||||
@@ -221,7 +228,7 @@ export class GVGProduceHandler {
|
|||||||
// 创建rec
|
// 创建rec
|
||||||
const attackInfo = await generateAttackInfo(roleId, myRank);
|
const attackInfo = await generateAttackInfo(roleId, myRank);
|
||||||
const defenseInfo = await generateDefenseInfo(targetRoleId, vestigeId, rank);
|
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);
|
const oppDetail = await getOppDetailData(rec);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, {
|
return resResult(STATUS.SUCCESS, {
|
||||||
@@ -237,7 +244,7 @@ export class GVGProduceHandler {
|
|||||||
// 更新ladderMatchRec
|
// 更新ladderMatchRec
|
||||||
let rec = await GVGVestigeRecModel.giveup(roleId, battleCode);
|
let rec = await GVGVestigeRecModel.giveup(roleId, battleCode);
|
||||||
if(rec && rec.defenseInfo) {
|
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, {
|
return resResult(STATUS.SUCCESS, {
|
||||||
@@ -283,7 +290,8 @@ export class GVGProduceHandler {
|
|||||||
|
|
||||||
// 更新锁
|
// 更新锁
|
||||||
const groupId = await getGroupIdOfServer(serverId);
|
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);
|
if(!lock) return resResult(STATUS.GVG_VESTIGE_CHECK_BATTLE_STATUS_ERR);
|
||||||
|
|
||||||
// 向vestigerec保存阵容
|
// 向vestigerec保存阵容
|
||||||
@@ -327,7 +335,7 @@ export class GVGProduceHandler {
|
|||||||
// 更新vestigeRec
|
// 更新vestigeRec
|
||||||
rec = await GVGVestigeRecModel.battleEnd(battleCode, isSuccess, endTime, atkData?.rank, defData?.rank||rec.attackInfo.oldRank);
|
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
|
// 更新battleRecord
|
||||||
await BattleRecordModel.updateBattleRecordByCode(battleCode, { $set: { status: isSuccess? 1: 2 } });
|
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,
|
score: gameData.gvgVestige.get(rec.vestigeId)?.get(atkData.rank)?.score,
|
||||||
historyRank: atkData.historyRank,
|
historyRank: atkData.historyRank,
|
||||||
...getVestigeRecStatus(rec),
|
...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,
|
breakGoods,
|
||||||
lineup: atkData.lineup,
|
lineup: atkData.lineup,
|
||||||
lineupCe: atkData.lineup.reduce((pre, cur) => pre + cur.ce, 0),
|
lineupCe: atkData.lineup.reduce((pre, cur) => pre + cur.ce, 0),
|
||||||
@@ -382,6 +390,44 @@ export class GVGProduceHandler {
|
|||||||
|
|
||||||
// 玩家排行
|
// 玩家排行
|
||||||
async getPlayerRank(msg: { vestigeId: number }, session: BackendSession) {
|
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;
|
const { type } = msg;
|
||||||
|
|
||||||
let { configId, period } = getGVGPeriodData();
|
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);
|
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||||
@@ -102,7 +102,7 @@ export class GVGProduceHandler {
|
|||||||
const { farmId } = msg;
|
const { farmId } = msg;
|
||||||
|
|
||||||
let { configId, period } = getGVGPeriodData();
|
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);
|
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||||
@@ -142,7 +142,7 @@ export class GVGProduceHandler {
|
|||||||
const { farmId } = msg;
|
const { farmId } = msg;
|
||||||
|
|
||||||
let { period } = getGVGPeriodData();
|
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);
|
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||||
@@ -165,7 +165,7 @@ export class GVGProduceHandler {
|
|||||||
|
|
||||||
const { farmId, seeds } = msg;
|
const { farmId, seeds } = msg;
|
||||||
let { configId, period } = getGVGPeriodData();
|
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);
|
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||||
@@ -213,7 +213,7 @@ export class GVGProduceHandler {
|
|||||||
|
|
||||||
const { farmId, fieldIds } = msg;
|
const { farmId, fieldIds } = msg;
|
||||||
let { configId, period } = getGVGPeriodData();
|
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);
|
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||||
@@ -265,7 +265,7 @@ export class GVGProduceHandler {
|
|||||||
|
|
||||||
const { farmId, fieldId } = msg;
|
const { farmId, fieldId } = msg;
|
||||||
let { configId, period } = getGVGPeriodData();
|
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);
|
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
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);
|
if(!checkItemCanUserInFarm(farmId, itemId)) return resResult(STATUS.GVG_ITEM_CANNOT_USE);
|
||||||
|
|
||||||
let { configId, period } = getGVGPeriodData();
|
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);
|
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||||
@@ -330,7 +330,7 @@ export class GVGProduceHandler {
|
|||||||
|
|
||||||
const { farmId, fieldId, result } = msg;
|
const { farmId, fieldId, result } = msg;
|
||||||
let { configId, period } = getGVGPeriodData();
|
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);
|
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||||
@@ -387,7 +387,7 @@ export class GVGProduceHandler {
|
|||||||
const { farmId } = msg;
|
const { farmId } = msg;
|
||||||
|
|
||||||
let { configId, period } = getGVGPeriodData();
|
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);
|
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
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);
|
if(!checkItemCanUserInFarm(farmId, itemId)) return resResult(STATUS.GVG_ITEM_CANNOT_USE);
|
||||||
|
|
||||||
let { configId, period } = getGVGPeriodData();
|
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);
|
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||||
@@ -457,7 +457,7 @@ export class GVGProduceHandler {
|
|||||||
|
|
||||||
const { farmId, fieldId, result } = msg;
|
const { farmId, fieldId, result } = msg;
|
||||||
let { configId, period } = getGVGPeriodData();
|
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);
|
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||||
|
|||||||
@@ -72,9 +72,11 @@ function randomRank(min: number, max: number, len: number) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 根据ranks获取oppPlayer显示数据
|
// 根据ranks获取oppPlayer显示数据
|
||||||
export async function getOppPlayerByRanks(serverId: number, groupId: number, vestigeId: number, ranks: number[]) {
|
export async function getOppPlayerByRanks(serverId: number, groupId: number, serverType: number, vestigeId: number, ranks: number[]) {
|
||||||
let serverNames = await getAllServerName();
|
let serverNames = await getAllServerName();
|
||||||
let opps = await GVGVestigeRankModel.findByRanks(groupId, vestigeId, ranks);
|
let opps = await GVGVestigeRankModel.findByRanks(groupId, serverType, vestigeId, ranks);
|
||||||
|
let roleIds = opps.map(cur => cur.roleId);
|
||||||
|
let roles = await RoleModel.findByRoleIds(roleIds, 'roleId roleName head frame spine heads frames spines title lv guildName serverId updatedAt')
|
||||||
let dicRankMap = gameData.gvgVestige.get(vestigeId);
|
let dicRankMap = gameData.gvgVestige.get(vestigeId);
|
||||||
if(!dicRankMap) return [];
|
if(!dicRankMap) return [];
|
||||||
let result: GVGVestigeOppPlayer[] = [];
|
let result: GVGVestigeOppPlayer[] = [];
|
||||||
@@ -83,7 +85,8 @@ export async function getOppPlayerByRanks(serverId: number, groupId: number, ves
|
|||||||
let opp = opps.find(cur => cur.rank == rank);
|
let opp = opps.find(cur => cur.rank == rank);
|
||||||
let dicCurRank = dicRankMap.get(rank);
|
let dicCurRank = dicRankMap.get(rank);
|
||||||
if(opp) {
|
if(opp) {
|
||||||
let role = <RoleType>opp.role;
|
let role = roles.find(cur => cur.roleId == opp.roleId);
|
||||||
|
if(!role) continue;
|
||||||
let lineupce = opp.lineup.reduce((pre, cur) => pre + cur.ce, 0);
|
let lineupce = opp.lineup.reduce((pre, cur) => pre + cur.ce, 0);
|
||||||
obj.setByRole(role, serverNames, lineupce, dicCurRank?.score||0);
|
obj.setByRole(role, serverNames, lineupce, dicCurRank?.score||0);
|
||||||
} else {
|
} else {
|
||||||
@@ -142,13 +145,13 @@ export function isRobot(roleId: string) {
|
|||||||
return roleId.startsWith('robot');
|
return roleId.startsWith('robot');
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function checkVestigeOppStatus(configId: number, groupId: number, vestigeId: number, roleId: string, myRank: number, targetRoleId: string, rank: number) {
|
export async function checkVestigeOppStatus(configId: number, groupId: number, serverType: number, vestigeId: number, roleId: string, myRank: number, targetRoleId: string, rank: number) {
|
||||||
|
|
||||||
let myData = await GVGVestigeRankModel.findByRole(vestigeId, roleId);
|
let myData = await GVGVestigeRankModel.findByRole(vestigeId, roleId);
|
||||||
if(!myData) {
|
if(!myData) {
|
||||||
let role = await RoleModel.findByRoleId(roleId, 'roleId');
|
let role = await RoleModel.findByRoleId(roleId, 'roleId');
|
||||||
let oppRanks = refreshVestigeOppRanks(-1);
|
let oppRanks = refreshVestigeOppRanks(-1);
|
||||||
myData = await GVGVestigeRankModel.initRank(configId, vestigeId, groupId, role, oppRanks );
|
myData = await GVGVestigeRankModel.initRank(configId, vestigeId, groupId, serverType, role, oppRanks );
|
||||||
}
|
}
|
||||||
if(myData?.rank != myRank) return VESTIGE_OPP_STATUS.MY_RANK_CHANGE;
|
if(myData?.rank != myRank) return VESTIGE_OPP_STATUS.MY_RANK_CHANGE;
|
||||||
|
|
||||||
@@ -159,7 +162,7 @@ export async function checkVestigeOppStatus(configId: number, groupId: number, v
|
|||||||
let targetData = await GVGVestigeRankModel.findByRole(vestigeId, targetRoleId);
|
let targetData = await GVGVestigeRankModel.findByRole(vestigeId, targetRoleId);
|
||||||
if(targetData?.rank != rank) return VESTIGE_OPP_STATUS.OPP_RANK_CHANGE;
|
if(targetData?.rank != rank) return VESTIGE_OPP_STATUS.OPP_RANK_CHANGE;
|
||||||
}
|
}
|
||||||
let lockResult = await GVGVestigeLockModel.chooseOppLock(groupId, vestigeId, rank, configId, roleId, targetRoleId);
|
let lockResult = await GVGVestigeLockModel.chooseOppLock(groupId, serverType, vestigeId, rank, configId, roleId, targetRoleId);
|
||||||
if(!lockResult) return VESTIGE_OPP_STATUS.OPP_IS_LOCKED;
|
if(!lockResult) return VESTIGE_OPP_STATUS.OPP_IS_LOCKED;
|
||||||
|
|
||||||
return VESTIGE_OPP_STATUS.BATTLE;
|
return VESTIGE_OPP_STATUS.BATTLE;
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ export async function setGVGServerGroup() {
|
|||||||
const servers = await ServerlistModel.findByEnv(pinus.app.get('env'));
|
const servers = await ServerlistModel.findByEnv(pinus.app.get('env'));
|
||||||
const serverGroups = await GVGServerGroupModel.findByTime(nowSeconds());
|
const serverGroups = await GVGServerGroupModel.findByTime(nowSeconds());
|
||||||
pinus.app.set('gvgServerGroup', servers.map(obj => {
|
pinus.app.set('gvgServerGroup', servers.map(obj => {
|
||||||
let server = serverGroups.find(cur => cur.serverId == obj.serverId);
|
let server = serverGroups.find(cur => cur.serverId == obj.id);
|
||||||
return { serverId: obj.id, groupId: server? server.groupId: obj.groupId }
|
return { serverId: obj.id, groupId: server? server.groupId: obj.groupId }
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,8 +20,6 @@ import { sendMessageToUserWithSuc } from './pushService';
|
|||||||
import { SkinType } from '../db/Skin';
|
import { SkinType } from '../db/Skin';
|
||||||
import { LadderMatchModel } from '../db/LadderMatch';
|
import { LadderMatchModel } from '../db/LadderMatch';
|
||||||
import { ArtifactModelType } from '../db/Artifact';
|
import { ArtifactModelType } from '../db/Artifact';
|
||||||
import { GVGLeagueModel } from '../db/GVGLeague';
|
|
||||||
import { GVGVestigeRankModel } from '../db/GVGVestigeRank';
|
|
||||||
|
|
||||||
interface Param {
|
interface Param {
|
||||||
isInitRole?: boolean,
|
isInitRole?: boolean,
|
||||||
@@ -443,7 +441,6 @@ export async function calculateCes(type: HERO_SYSTEM_TYPE, roleId: string, serve
|
|||||||
let hero = await HeroModel.updateHeroInfo(roleId, hid, { ce });
|
let hero = await HeroModel.updateHeroInfo(roleId, hid, { ce });
|
||||||
await PvpDefenseModel.updateCe(roleId, hid, ce); // 更新pvp防守阵战力
|
await PvpDefenseModel.updateCe(roleId, hid, ce); // 更新pvp防守阵战力
|
||||||
await LadderMatchModel.updateCe(roleId, hid, ce);
|
await LadderMatchModel.updateCe(roleId, hid, ce);
|
||||||
await GVGVestigeRankModel.updateCe(roleId, hid, ce);
|
|
||||||
pushHeros.push({ hid, ce: hero.ce, incHeroCe: inc });
|
pushHeros.push({ hid, ce: hero.ce, incHeroCe: inc });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import { ActivityTimeLimitRankModel } from "../db/ActivityTimeLimitRank";
|
|||||||
import { sendMessageToServerWithSuc } from "./pushService";
|
import { sendMessageToServerWithSuc } from "./pushService";
|
||||||
import { LadderMatchModel } from "../db/LadderMatch";
|
import { LadderMatchModel } from "../db/LadderMatch";
|
||||||
import { completeRanks } from "./ladderService";
|
import { completeRanks } from "./ladderService";
|
||||||
|
import { GVGVestigeRankModel } from "../db/GVGVestigeRank";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -757,7 +758,7 @@ export class Rank {
|
|||||||
|
|
||||||
let param: RoleRankInfo | GuildRankInfo;
|
let param: RoleRankInfo | GuildRankInfo;
|
||||||
if (this.infoKey == REDIS_KEY.USER_INFO) {
|
if (this.infoKey == REDIS_KEY.USER_INFO) {
|
||||||
if (this.key != REDIS_KEY.LADDER && nowSeconds() - userInfo.updatedAt > 2 * 30 * 24 * 60 * 60) {
|
if (this.key != REDIS_KEY.LADDER && this.key != REDIS_KEY.GVG_VESTIGE_MEMBER && nowSeconds() - userInfo.updatedAt > 2 * 30 * 24 * 60 * 60) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
param = new RoleRankInfo(userInfo);
|
param = new RoleRankInfo(userInfo);
|
||||||
@@ -992,7 +993,7 @@ async function setRankFirst(rankFirstRec: RankFirstType) {
|
|||||||
* @param type 排行榜类型
|
* @param type 排行榜类型
|
||||||
* @param serverId 分服
|
* @param serverId 分服
|
||||||
*/
|
*/
|
||||||
export async function setRankRedisFromDb(type: string, args?: { serverId?: number }) {
|
export async function setRankRedisFromDb(type: string, args?: { serverId?: number, groupId?: number }) {
|
||||||
if (type == REDIS_KEY.TOWER_RANK) {
|
if (type == REDIS_KEY.TOWER_RANK) {
|
||||||
let serverId = args.serverId;
|
let serverId = args.serverId;
|
||||||
let ranks = await RoleModel.getRank('tower', serverId, ROLE_SELECT.RANK);
|
let ranks = await RoleModel.getRank('tower', serverId, ROLE_SELECT.RANK);
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ import { RoleModel, RoleType } from '../db/Role';
|
|||||||
import { GuildType } from '../db/Guild';
|
import { GuildType } from '../db/Guild';
|
||||||
import { ActivityGroupModel } from '../db/ActivityGroup';
|
import { ActivityGroupModel } from '../db/ActivityGroup';
|
||||||
import { LadderMatchModel, LadderMatchType } from '../db/LadderMatch';
|
import { LadderMatchModel, LadderMatchType } from '../db/LadderMatch';
|
||||||
|
import { GVGServerGroupModel } from '../db/GVGServerGroup';
|
||||||
|
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 在服务重新启动时,将信息存入redis
|
* 在服务重新启动时,将信息存入redis
|
||||||
@@ -52,7 +54,7 @@ export async function initAllRank() {
|
|||||||
await setRankRedisFromDb(REDIS_KEY.PVP_RANK, {});
|
await setRankRedisFromDb(REDIS_KEY.PVP_RANK, {});
|
||||||
|
|
||||||
for(let {id} of serverList) {
|
for(let {id} of serverList) {
|
||||||
await initRank(id);
|
await initRankByServerId(id);
|
||||||
await initActivitiesRank(id)
|
await initActivitiesRank(id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -62,7 +64,7 @@ export async function initAllRank() {
|
|||||||
*
|
*
|
||||||
* @param serverId 服务器
|
* @param serverId 服务器
|
||||||
*/
|
*/
|
||||||
export async function initRank(serverId: number) {
|
export async function initRankByServerId(serverId: number) {
|
||||||
// console.log('*****', 'initRank')
|
// console.log('*****', 'initRank')
|
||||||
await setRankRedisFromDb(REDIS_KEY.TOWER_RANK, { serverId });
|
await setRankRedisFromDb(REDIS_KEY.TOWER_RANK, { serverId });
|
||||||
await setRankRedisFromDb(REDIS_KEY.GUILD_ACTIVE_RANK, { serverId });
|
await setRankRedisFromDb(REDIS_KEY.GUILD_ACTIVE_RANK, { serverId });
|
||||||
|
|||||||
@@ -255,6 +255,8 @@ export enum REDIS_KEY {
|
|||||||
LADDER = 'ladder', // 名将擂台
|
LADDER = 'ladder', // 名将擂台
|
||||||
LADDER_DEFCE = 'ladderDefCe', // 名将擂台的防守战力
|
LADDER_DEFCE = 'ladderDefCe', // 名将擂台的防守战力
|
||||||
GA_HISTORY_CITY = 'gaHisCity', // 诸侯混战打开过的城池页面
|
GA_HISTORY_CITY = 'gaHisCity', // 诸侯混战打开过的城池页面
|
||||||
|
GVG_VESTIGE_MEMBER = 'vestigeUsr', // 玩家一个遗迹的积分
|
||||||
|
GVG_VESTIGE_MEMBER_ALL = 'vestigeUsrAll', // 玩家所有遗迹积分
|
||||||
}
|
}
|
||||||
|
|
||||||
// 各排行榜对应hash的key
|
// 各排行榜对应hash的key
|
||||||
@@ -305,6 +307,10 @@ export function getInfoKeyByRedisKey(redisKey: REDIS_KEY) {
|
|||||||
return { infoKey: REDIS_KEY.USER_INFO, extraKey: [] };
|
return { infoKey: REDIS_KEY.USER_INFO, extraKey: [] };
|
||||||
case REDIS_KEY.TOP_LINE_SNAPSHOT: // 战力限时排行榜的快照
|
case REDIS_KEY.TOP_LINE_SNAPSHOT: // 战力限时排行榜的快照
|
||||||
return { infoKey: REDIS_KEY.USER_INFO, extraKey: [] };
|
return { infoKey: REDIS_KEY.USER_INFO, extraKey: [] };
|
||||||
|
case REDIS_KEY.GVG_VESTIGE_MEMBER: // 单遗迹玩家排行榜
|
||||||
|
return { infoKey: REDIS_KEY.USER_INFO, extraKey: [] };
|
||||||
|
case REDIS_KEY.GVG_VESTIGE_MEMBER_ALL: // 全遗迹玩家排行榜
|
||||||
|
return { infoKey: REDIS_KEY.USER_INFO, extraKey: [] };
|
||||||
default:
|
default:
|
||||||
return { infoKey: REDIS_KEY.USER_INFO, extraKey: [] };
|
return { infoKey: REDIS_KEY.USER_INFO, extraKey: [] };
|
||||||
}
|
}
|
||||||
@@ -399,6 +405,7 @@ export const KEY_TO_COMPOSE_FIELD = new Map([
|
|||||||
[REDIS_KEY.SUM_CE_SNAPSHOT, COMPOSE_FIELD_TYPE.ROLE],
|
[REDIS_KEY.SUM_CE_SNAPSHOT, COMPOSE_FIELD_TYPE.ROLE],
|
||||||
[REDIS_KEY.TOP_LINE_SNAPSHOT, COMPOSE_FIELD_TYPE.ROLE],
|
[REDIS_KEY.TOP_LINE_SNAPSHOT, COMPOSE_FIELD_TYPE.ROLE],
|
||||||
[REDIS_KEY.LADDER, COMPOSE_FIELD_TYPE.ROLE],
|
[REDIS_KEY.LADDER, COMPOSE_FIELD_TYPE.ROLE],
|
||||||
|
[REDIS_KEY.GVG_VESTIGE_MEMBER, COMPOSE_FIELD_TYPE.ROLE],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ export default class GVGLeagueApply extends BaseModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static async checkApply(leagueCode: string, guildCode: string, type: GVG_APPLY_TYPE) {
|
public static async checkApply(leagueCode: string, guildCode: string, type: GVG_APPLY_TYPE) {
|
||||||
console.log('####', leagueCode, guildCode, type)
|
// console.log('####', leagueCode, guildCode, type)
|
||||||
const result = await GVGLeagueApplyModel.exists({ guildCode, leagueCode,
|
const result = await GVGLeagueApplyModel.exists({ guildCode, leagueCode,
|
||||||
type: type == GVG_APPLY_TYPE.ALL? { $in: [GVG_APPLY_TYPE.APPLY, GVG_APPLY_TYPE.INVITE] }: type
|
type: type == GVG_APPLY_TYPE.ALL? { $in: [GVG_APPLY_TYPE.APPLY, GVG_APPLY_TYPE.INVITE] }: type
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -16,6 +16,9 @@ export default class GVGVestigeLock extends BaseModel {
|
|||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
groupId: number; // 战区id
|
groupId: number; // 战区id
|
||||||
|
|
||||||
|
@prop({ required: true })
|
||||||
|
serverType: number; // 1-单服 2-跨服
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
vestigeId: number; // 遗迹id
|
vestigeId: number; // 遗迹id
|
||||||
|
|
||||||
@@ -31,26 +34,26 @@ export default class GVGVestigeLock extends BaseModel {
|
|||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
defenseRoleId: string; // 防守玩家
|
defenseRoleId: string; // 防守玩家
|
||||||
|
|
||||||
public static async chooseOppLock(groupId: number, vestigeId: number, rank: number, configId: number, attackRoleId: string, defenseRoleId: string ) {
|
public static async chooseOppLock(groupId: number, serverType: number, vestigeId: number, rank: number, configId: number, attackRoleId: string, defenseRoleId: string ) {
|
||||||
let day = getZeroPoint();
|
let day = getZeroPoint();
|
||||||
await GVGVestigeLockModel.findOneAndUpdate({ day, groupId, vestigeId, rank }, { $setOnInsert: { configId, unlockTime: 0 } }, { upsert: true });
|
await GVGVestigeLockModel.findOneAndUpdate({ day, groupId, serverType, vestigeId, rank }, { $setOnInsert: { configId, unlockTime: 0 } }, { upsert: true });
|
||||||
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({
|
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({
|
||||||
day, groupId, vestigeId, rank, unlockTime: { $lt: Date.now() }
|
day, groupId, vestigeId, rank, unlockTime: { $lt: Date.now() }
|
||||||
}, { $set: { unlockTime: Date.now() + GVG.GVG_VESTIGE_PREPARE_COUNTDOWN * 1000, attackRoleId, defenseRoleId } }, { new: true }).lean();
|
}, { $set: { unlockTime: Date.now() + GVG.GVG_VESTIGE_PREPARE_COUNTDOWN * 1000, attackRoleId, defenseRoleId } }, { new: true }).lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async checkBattleLock(groupId: number, vestigeId: number, rank: number, attackRoleId: string) {
|
public static async checkBattleLock(groupId: number, serverType: number, vestigeId: number, rank: number, attackRoleId: string) {
|
||||||
let day = getZeroPoint();
|
let day = getZeroPoint();
|
||||||
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({
|
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({
|
||||||
day, groupId, vestigeId, rank, attackRoleId, unlockTime: { $gt: Date.now() }
|
day, groupId, serverType, vestigeId, rank, attackRoleId, unlockTime: { $gt: Date.now() }
|
||||||
}, { $set: { unlockTime: Date.now() + GVG.GVG_VESTIGE_BATTLE_COUNTDOWN * 1000 } }, { new: true }).lean();
|
}, { $set: { unlockTime: Date.now() + GVG.GVG_VESTIGE_BATTLE_COUNTDOWN * 1000 } }, { new: true }).lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async releaseLock(groupId: number, vestigeId: number, rank: number) {
|
public static async releaseLock(groupId: number, serverType: number, vestigeId: number, rank: number) {
|
||||||
let day = getZeroPoint();
|
let day = getZeroPoint();
|
||||||
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({ day, groupId, vestigeId, rank }, { $set: { unlockTime: 0 } }, { new: true }).lean();
|
let result: GVGVestigeLockType = await GVGVestigeLockModel.findOneAndUpdate({ day, groupId, serverType, vestigeId, rank }, { $set: { unlockTime: 0 } }, { new: true }).lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export class Lineup {
|
|||||||
ce: number; // 战力
|
ce: number; // 战力
|
||||||
}
|
}
|
||||||
|
|
||||||
@index({ day: 1, groupId: 1, vestigeId: 1, rank: 1 })
|
@index({ day: 1, groupId: 1, serverType: 1, vestigeId: 1, rank: 1 })
|
||||||
@index({ roleId: 1 })
|
@index({ roleId: 1 })
|
||||||
export default class GVGVestigeRank extends BaseModel {
|
export default class GVGVestigeRank extends BaseModel {
|
||||||
|
|
||||||
@@ -31,10 +31,10 @@ export default class GVGVestigeRank extends BaseModel {
|
|||||||
vestigeId: number; // 遗迹id
|
vestigeId: number; // 遗迹id
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
roleId: string; // 玩家
|
serverType: number; // 1-单服 2-跨服
|
||||||
|
|
||||||
@prop({ ref: 'Role', type: mongoose.Schema.Types.ObjectId })
|
@prop({ required: true })
|
||||||
role: Ref<Role>;
|
roleId: string; // 玩家
|
||||||
|
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
rank: number; // 排名
|
rank: number; // 排名
|
||||||
@@ -75,10 +75,10 @@ export default class GVGVestigeRank extends BaseModel {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async initRank(configId: number, vestigeId: number, groupId: number, role: RoleType, oppRanks: number[]) {
|
public static async initRank(configId: number, vestigeId: number, groupId: number, serverType: number, role: RoleType, oppRanks: number[]) {
|
||||||
let today = getZeroPoint();
|
let today = getZeroPoint();
|
||||||
let doc = new GVGVestigeRankModel();
|
let doc = new GVGVestigeRankModel();
|
||||||
let update = Object.assign(doc.toJSON(), { role: role._id, configId, groupId, oppRanks });
|
let update = Object.assign(doc.toJSON(), { role: role._id, configId, groupId, serverType, oppRanks });
|
||||||
let result: GVGVestigeRankType = await GVGVestigeRankModel.findOneAndUpdate({ day: today, vestigeId, roleId: role.roleId }, { $setOnInsert: update }, { new: true, upsert: true }).lean();
|
let result: GVGVestigeRankType = await GVGVestigeRankModel.findOneAndUpdate({ day: today, vestigeId, roleId: role.roleId }, { $setOnInsert: update }, { new: true, upsert: true }).lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -89,10 +89,9 @@ export default class GVGVestigeRank extends BaseModel {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async findByRanks(groupId: number, vestigeId: number, ranks: number[]) {
|
public static async findByRanks(groupId: number, serverType: number, vestigeId: number, ranks: number[]) {
|
||||||
let today = getZeroPoint();
|
let today = getZeroPoint();
|
||||||
let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupId, rank: { $in: ranks } })
|
let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupId, serverType, rank: { $in: ranks } })
|
||||||
.populate('role', 'roleId roleName head frame spine heads frames spines title lv guildName serverId updatedAt')
|
|
||||||
.lean();
|
.lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -142,6 +141,24 @@ export default class GVGVestigeRank extends BaseModel {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async findRank(): Promise<{ _id: { groupId: number, vestigeId: number, serverType: number }, arr: { roleId: string, rank: number }[], roleIds: string[] }[]> {
|
||||||
|
let today = getZeroPoint();
|
||||||
|
let ranks = await GVGVestigeRankModel.aggregate([
|
||||||
|
{ $match: { day: today } },
|
||||||
|
{ $group: {
|
||||||
|
_id: { groupId: "$groupId", vestigeId: "$vestigeId", serverType: "$serverType" },
|
||||||
|
arr: { $push: { roleId: "$roleId", rank: "$rank" } }, roleIds: { $addToSet: "$roleId" }
|
||||||
|
}},
|
||||||
|
]);
|
||||||
|
return ranks;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static async findRankByVestige(groupId: number, serverType: number, vestigeId: number) {
|
||||||
|
let today = getZeroPoint();
|
||||||
|
let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupId, serverType }).sort({ rank: 1 }).select('roleId rank lineup').lean();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const GVGVestigeRankModel = getModelForClass(GVGVestigeRank);
|
export const GVGVestigeRankModel = getModelForClass(GVGVestigeRank);
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ export default class GVGVestigeRec extends BaseModel {
|
|||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
groupId: number; // 战区id
|
groupId: number; // 战区id
|
||||||
|
|
||||||
|
@prop({ required: true })
|
||||||
|
serverType: number; // 战区id
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
vestigeId: number; // 遗迹id
|
vestigeId: number; // 遗迹id
|
||||||
|
|
||||||
@@ -62,10 +65,10 @@ export default class GVGVestigeRec extends BaseModel {
|
|||||||
@prop({ required: true, default: false })
|
@prop({ required: true, default: false })
|
||||||
hasRpl: boolean; // 是否存在对应录像
|
hasRpl: boolean; // 是否存在对应录像
|
||||||
|
|
||||||
public static async createRec(configId: number, vestigeId: number, groupId: number, warId: number, attackInfo: OppPlayerInfo, defenseInfo: OppPlayerInfo, leagueGoods: LeagueGood[]) {
|
public static async createRec(configId: number, vestigeId: number, groupId: number, serverType: number, warId: number, attackInfo: OppPlayerInfo, defenseInfo: OppPlayerInfo, leagueGoods: LeagueGood[]) {
|
||||||
const battleCode = genCode(10);
|
const battleCode = genCode(10);
|
||||||
const result: GVGVestigeRecType = await GVGVestigeRecModel.findOneAndUpdate({ battleCode }, {
|
const result: GVGVestigeRecType = await GVGVestigeRecModel.findOneAndUpdate({ battleCode }, {
|
||||||
$set: { configId, vestigeId, groupId, attackRoleId: attackInfo.roleId, defenseRoleId: defenseInfo.roleId, warId, checkTime: Date.now(), attackInfo, defenseInfo, leagueGoods }
|
$set: { configId, vestigeId, groupId, serverType, attackRoleId: attackInfo.roleId, defenseRoleId: defenseInfo.roleId, warId, checkTime: Date.now(), attackInfo, defenseInfo, leagueGoods }
|
||||||
}, { new: true, upsert: true }).lean();
|
}, { new: true, upsert: true }).lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ export default class HiddenData extends BaseModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static async findNextData(now: number) {
|
public static async findNextData(now: number) {
|
||||||
console.log('####', now)
|
// console.log('####', now)
|
||||||
let result: HiddenDataModelType = await HiddenDataModel.findOne({ refTime: { $gt: now } }).sort({ refTime: 1 });
|
let result: HiddenDataModelType = await HiddenDataModel.findOne({ refTime: { $gt: now } }).sort({ refTime: 1 });
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ export default class TowerRecord extends BaseModel {
|
|||||||
|
|
||||||
// 跳过当前层
|
// 跳过当前层
|
||||||
public static async skipTower(roleId: string, fromLv: number, curLv: number, warStatus: WarStatus[]) {
|
public static async skipTower(roleId: string, fromLv: number, curLv: number, warStatus: WarStatus[]) {
|
||||||
console.log('######## skipTower', roleId, fromLv, curLv)
|
// console.log('######## skipTower', roleId, fromLv, curLv)
|
||||||
|
|
||||||
await TowerRecordModel.findOneAndUpdate({ roleId, lv: fromLv }, { $set: { passed: true } }, { new: true });
|
await TowerRecordModel.findOneAndUpdate({ roleId, lv: fromLv }, { $set: { passed: true } }, { new: true });
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import { EXTERIOR, GVG } from "../../pubUtils/dicParam";
|
|||||||
import { DicWarJson } from "../../pubUtils/dictionary/DicWarJson";
|
import { DicWarJson } from "../../pubUtils/dictionary/DicWarJson";
|
||||||
import { gameData } from "../../pubUtils/data";
|
import { gameData } from "../../pubUtils/data";
|
||||||
import { HeroType } from "../../db/Hero";
|
import { HeroType } from "../../db/Hero";
|
||||||
|
import { RoleRankInfo } from "../rank";
|
||||||
|
|
||||||
class LeagueLeaderInfo {
|
class LeagueLeaderInfo {
|
||||||
name: string; // 盟主名
|
name: string; // 盟主名
|
||||||
@@ -520,4 +521,43 @@ export class GVGVestigeOppLineup {
|
|||||||
this.heroes.push(obj);
|
this.heroes.push(obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class VestigeRank {
|
||||||
|
rank: number;
|
||||||
|
roleId: string;
|
||||||
|
roleName: string;
|
||||||
|
guildName: string;
|
||||||
|
serverName: string;
|
||||||
|
lv: number;
|
||||||
|
head: number;
|
||||||
|
frame: number;
|
||||||
|
lineupCe: number;
|
||||||
|
score: number;
|
||||||
|
|
||||||
|
setByRankParam(obj: RoleRankInfo, serverName: string, lineupCe: number, score: number) {
|
||||||
|
this.rank = obj.rank;
|
||||||
|
this.roleId = obj.roleId;
|
||||||
|
this.roleName = obj.roleName;
|
||||||
|
this.guildName = obj.guildName;
|
||||||
|
this.serverName = serverName;
|
||||||
|
this.lv = obj.lv;
|
||||||
|
this.head = obj.head;
|
||||||
|
this.frame = obj.frame;
|
||||||
|
this.lineupCe = lineupCe;
|
||||||
|
this.score = score;
|
||||||
|
}
|
||||||
|
|
||||||
|
setByRole(role: RoleType, serverName: string) {
|
||||||
|
this.rank = 0;
|
||||||
|
this.roleId = role.roleId;
|
||||||
|
this.roleName = role.roleName;
|
||||||
|
this.guildName = role.guildName;
|
||||||
|
this.serverName = serverName;
|
||||||
|
this.lv = role.lv;
|
||||||
|
this.head = role.head;
|
||||||
|
this.frame = role.frame;
|
||||||
|
this.lineupCe = 0;
|
||||||
|
this.score = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -301,6 +301,9 @@ export class KeyName {
|
|||||||
seasonNum?: number;
|
seasonNum?: number;
|
||||||
activityId?: number;
|
activityId?: number;
|
||||||
index?: number; // 军团活动第几期
|
index?: number; // 军团活动第几期
|
||||||
|
vestigeId?: number;
|
||||||
|
groupId?: number;
|
||||||
|
serverType?: number;
|
||||||
|
|
||||||
constructor(key: string, param: KeyNameParam) {
|
constructor(key: string, param: KeyNameParam) {
|
||||||
this.key = key;
|
this.key = key;
|
||||||
@@ -311,6 +314,9 @@ export class KeyName {
|
|||||||
if(param.seasonNum) this.seasonNum = param.seasonNum;
|
if(param.seasonNum) this.seasonNum = param.seasonNum;
|
||||||
if(param.activityId) this.activityId = param.activityId;
|
if(param.activityId) this.activityId = param.activityId;
|
||||||
if(param.index) this.index = param.index;
|
if(param.index) this.index = param.index;
|
||||||
|
if(param.vestigeId) this.vestigeId = param.vestigeId;
|
||||||
|
if(param.groupId) this.groupId = param.groupId;
|
||||||
|
if(param.serverType) this.serverType = param.serverType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public getName() {
|
public getName() {
|
||||||
@@ -343,6 +349,10 @@ export class KeyName {
|
|||||||
case REDIS_KEY.SUM_CE_SNAPSHOT:
|
case REDIS_KEY.SUM_CE_SNAPSHOT:
|
||||||
case REDIS_KEY.TOP_LINE_SNAPSHOT:
|
case REDIS_KEY.TOP_LINE_SNAPSHOT:
|
||||||
return `${this.key}:${this.serverId}:${this.activityId}`;
|
return `${this.key}:${this.serverId}:${this.activityId}`;
|
||||||
|
case REDIS_KEY.GVG_VESTIGE_MEMBER:
|
||||||
|
return `${this.key}:${this.groupId}:${this.serverType}:${this.vestigeId}`;
|
||||||
|
case REDIS_KEY.GVG_VESTIGE_MEMBER_ALL:
|
||||||
|
return `${this.key}:${this.groupId}`;
|
||||||
default:
|
default:
|
||||||
return this.key;
|
return this.key;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user