✨ feat(gvg): 征战中原排行榜奖励
This commit is contained in:
@@ -3,6 +3,7 @@ import { GVG_ACTIVE_TYPE, GVG_ITEM, GVG_PERIOD, ITEM_CHANGE_REASON, REDIS_KEY, R
|
||||
import { BattleRecordModel } from "../../../db/BattleRecord";
|
||||
import { GVGLeagueModel } from "../../../db/GVGLeague";
|
||||
import { GVGUserItemModel } from "../../../db/GVGUserItem";
|
||||
import GVGVestigeLeagueRank, { GVGVestigeLeagueRankModel } from "../../../db/GVGVestigeLeagueRank";
|
||||
import { GVGVestigeLockModel } from "../../../db/GVGVestigeLock";
|
||||
import { GVGVestigeRankModel } from "../../../db/GVGVestigeRank";
|
||||
import { GVGVestigeRecModel, GVGVestigeRecUpdate } from "../../../db/GVGVestigeRec";
|
||||
@@ -11,12 +12,13 @@ import { RoleModel } from "../../../db/Role";
|
||||
import { GVGVestigeOppLineup, VestigeRank } from "../../../domain/gvgField/returnData";
|
||||
import { RoleRankInfo } from "../../../domain/rank";
|
||||
import { getRemoteRplFilePath, getRemoteRplPrefix } from "../../../pubUtils/battleUtils";
|
||||
import { gameData } from "../../../pubUtils/data";
|
||||
import { gameData, getGVGVestigeLeagueRank } from "../../../pubUtils/data";
|
||||
import { GVG } from "../../../pubUtils/dicParam";
|
||||
import { RewardInter } from "../../../pubUtils/interface";
|
||||
import { resResult } from "../../../pubUtils/util";
|
||||
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 { 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 { getGroupIdOfServer, getGVGPeriodData, getGVGServerType } from "../../../services/gvg/gvgService";
|
||||
import { checkBattleHeroesByHid } from "../../../services/normalBattleService";
|
||||
@@ -38,6 +40,7 @@ export class GVGProduceHandler {
|
||||
async getVestige(msg: { vestigeId: number }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
const guildCode = session.get('guildCode');
|
||||
const { vestigeId } = msg;
|
||||
|
||||
let { configId, period } = getGVGPeriodData();
|
||||
@@ -46,20 +49,20 @@ export class GVGProduceHandler {
|
||||
if(!await checkVestige(serverId, vestigeId)) {
|
||||
return resResult(STATUS.GVG_VESTIGE_ERR);
|
||||
}
|
||||
|
||||
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
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);
|
||||
|
||||
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, serverType, role, oppRanks );
|
||||
}
|
||||
let myVestigeRank = await getMyVestigeRank(configId, groupId, serverType, vestigeId, roleId, myLeague);
|
||||
if(!myVestigeRank) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
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, serverType, vestigeId, oppRanks);
|
||||
@@ -68,7 +71,7 @@ export class GVGProduceHandler {
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
vestigeId,
|
||||
myRank: rank,
|
||||
score,
|
||||
score: dicRankMap?.get(rank)?.score||0,
|
||||
lineup, lineupCe,
|
||||
oppPlayers,
|
||||
refreshCnt,
|
||||
@@ -88,12 +91,8 @@ export class GVGProduceHandler {
|
||||
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, serverType, role, oppRanks );
|
||||
}
|
||||
let myVestigeRank = await getMyVestigeRank(configId, groupId, serverType, vestigeId, roleId);
|
||||
if(!myVestigeRank) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
for(let { actorId } of heroes) {
|
||||
if(isHeroHidden(actorId)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
@@ -162,13 +161,7 @@ export class GVGProduceHandler {
|
||||
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, serverType, role, oppRanks );
|
||||
}
|
||||
|
||||
let myVestigeRank = await getMyVestigeRank(configId, groupId, serverType, vestigeId, roleId);
|
||||
let refreshCnt = myVestigeRank.refreshCnt||0;
|
||||
if(refreshCnt >= GVG.GVG_REFRESH_TIME) return resResult(STATUS.GVG_VESTIGE_REFESH_CNT_MAX);
|
||||
|
||||
@@ -226,7 +219,7 @@ export class GVGProduceHandler {
|
||||
// 消耗征战令的获得活跃
|
||||
let active = await addGVGActive(myLeague.leagueCode, roleId, GVG_ACTIVE_TYPE.COST_FIGHT_COIN);
|
||||
// 创建rec
|
||||
const attackInfo = await generateAttackInfo(roleId, myRank);
|
||||
const attackInfo = await generateAttackInfo(roleId, myLeague.leagueCode, 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);
|
||||
@@ -343,14 +336,14 @@ export class GVGProduceHandler {
|
||||
let { rewards, leagueRewards } = calBreakGoods(rec.vestigeId, historyRank, atkData.rank);
|
||||
let breakGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, leagueRewards, rewards, ITEM_CHANGE_REASON.GVG_VESTIGE_END);
|
||||
|
||||
// TODO 更新redis排行榜
|
||||
await saveScoreToRank(rec);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
vestigeId: rec.vestigeId,
|
||||
battleCode: rec.battleCode,
|
||||
leagueGoods: rec.leagueGoods,
|
||||
rank: atkData.rank,
|
||||
score: gameData.gvgVestige.get(rec.vestigeId)?.get(atkData.rank)?.score,
|
||||
score: gameData.gvgVestige.get(rec.vestigeId)?.get(atkData.rank)?.score??0,
|
||||
historyRank: atkData.historyRank,
|
||||
...getVestigeRecStatus(rec),
|
||||
oppPlayers: await getOppPlayerByRanks(serverId, rec.groupId, rec.serverType, rec.vestigeId, atkData.oppRanks),
|
||||
@@ -381,11 +374,48 @@ export class GVGProduceHandler {
|
||||
// 征战中原简单小排行榜
|
||||
async getLeagueRank(msg: {}, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
const guildCode = session.get('guildCode');
|
||||
|
||||
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
let groupId = await getGroupIdOfServer(serverId);
|
||||
let serverType = await getGVGServerType(serverId);
|
||||
let serverNames = await getAllServerName();
|
||||
|
||||
const { ranks: leagueRank, myRank: myLeagueRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_LEAGUE, true, { groupId, serverType, day: getDayKeyInfo() }, { leagueCode: myLeague.leagueCode });
|
||||
const { ranks: memberRank, myRank: myMemberRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_MEMBER_ALL, true, { groupId, serverType, day: getDayKeyInfo() }, { roleId }, serverNames);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
leagueRank, myLeagueRank, memberRank, myMemberRank
|
||||
})
|
||||
}
|
||||
|
||||
// 联军详细排名
|
||||
async getLeagueDetailRank(msg: {}, session: BackendSession) {
|
||||
const serverId = session.get('serverId');
|
||||
const guildCode = session.get('guildCode');
|
||||
|
||||
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
let groupId = await getGroupIdOfServer(serverId);
|
||||
let serverType = await getGVGServerType(serverId);
|
||||
let serverNames = await getAllServerName();
|
||||
let { configId } = getGVGPeriodData();
|
||||
|
||||
const { ranks, myRank } = await getVestigeRank(REDIS_KEY.GVG_VESTIGE_LEAGUE, false, { groupId, serverType, day: getDayKeyInfo() }, { leagueCode: myLeague.leagueCode }, serverNames);
|
||||
|
||||
let yesterdayRank = await GVGVestigeLeagueRank.getYesterdayRank(myLeague.leagueCode);
|
||||
let canReceiveRanks = await GVGVestigeLeagueRank.getCanReceiveRanks(configId, myLeague.leagueCode);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
ranks, myRank,
|
||||
latestRank: yesterdayRank?.rank||0,
|
||||
canReceiveBox: canReceiveRanks.length > 0
|
||||
})
|
||||
}
|
||||
|
||||
// 玩家排行
|
||||
@@ -432,7 +462,42 @@ export class GVGProduceHandler {
|
||||
}
|
||||
|
||||
// 领取排行榜获得的每日奖励
|
||||
async receiveBox(msg: { vestigeId: number }, session: BackendSession) {
|
||||
async receiveBox(msg: { }, session: BackendSession) {
|
||||
const guildCode = session.get('guildCode');
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const sid = session.get('sid');
|
||||
|
||||
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
let { configId } = getGVGPeriodData();
|
||||
let canReceiveRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, myLeague.leagueCode);
|
||||
if(canReceiveRanks.length <= 0) return resResult(STATUS.GVG_RECEIVE_NO_RANK_REWARD);
|
||||
let rewards: RewardInter[] = [], leagueReward: RewardInter[] = [];
|
||||
for(let { rank } of canReceiveRanks) {
|
||||
let dicRank = getGVGVestigeLeagueRank(rank);
|
||||
if(!dicRank) { console.error('dic_zyz_GVGVestigeLeagueRank error'); continue; }
|
||||
combinePushItem(rewards, dicRank.rankReward);
|
||||
combinePushItem(leagueReward, dicRank.rankLeagueReward);
|
||||
}
|
||||
let leagueGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, leagueReward, rewards, ITEM_CHANGE_REASON.GVG_VESTIGE_RECEIVE_RANK)
|
||||
await GVGVestigeLeagueRankModel.receiveRanks(canReceiveRanks.map(cur => cur._id));
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
leagueGoods,
|
||||
canReceiveRanks: false
|
||||
})
|
||||
}
|
||||
|
||||
async debugCalRec(msg: { battleCode: string }, session: BackendSession) {
|
||||
let rec = await GVGVestigeRecModel.findByBattleCode(msg.battleCode);
|
||||
await saveScoreToRank(rec);
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
async debugSaveScore(msg: {}, session: BackendSession) {
|
||||
await saveVestigeRankSchedule();
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
}
|
||||
@@ -146,8 +146,11 @@ export class GVGProduceHandler {
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
await lockField(myLeague.leagueCode, roleId, roleName, farmId);
|
||||
|
||||
let dicResource = gameData.gvgResource.get(farmId);
|
||||
if(dicResource.type == GVG_RESOURCE_TYPE.FOOD) {
|
||||
await lockField(myLeague.leagueCode, roleId, roleName, farmId);
|
||||
}
|
||||
const myRank = await getmyDistributeRank(myLeague.leagueCode, myLeague.members, roleId);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
|
||||
Reference in New Issue
Block a user