🐞 fix(gvg): 遗迹挑战次数添加元宝购买逻辑

This commit is contained in:
luying
2023-03-24 17:25:28 +08:00
parent 6fd0c682db
commit 6ca399c2e8
3 changed files with 37 additions and 8 deletions

View File

@@ -2,6 +2,7 @@ import { Application, BackendSession, ChannelService, HandlerService, pinus } fr
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 { GVGUserDailyDataModel } from "../../../db/GVGUserDailyData";
import { GVGUserItemModel } from "../../../db/GVGUserItem";
import { GVGVestigeLeagueRankModel } from "../../../db/GVGVestigeLeagueRank";
import { GVGVestigeLockModel } from "../../../db/GVGVestigeLock";
@@ -16,7 +17,7 @@ import { getRemoteRplFilePath, getRemoteRplPrefix } from "../../../pubUtils/batt
import { gameData } from "../../../pubUtils/data";
import { GVG } from "../../../pubUtils/dicParam";
import { RewardInter } from "../../../pubUtils/interface";
import { resResult } from "../../../pubUtils/util";
import { parseGoodStr, resResult } from "../../../pubUtils/util";
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, calVestigeLeagueBoxRewards, checkFightTime, savePlayerRank } from "../../../services/gvg/gvgFightService";
import { addGVGReward, combinePushItem, handleGVGCost } from "../../../services/gvg/gvgItemService";
@@ -26,6 +27,7 @@ import { getGroupKey, getGVGPeriodData } from "../../../services/gvg/gvgService"
import { checkBattleHeroesByHid } from "../../../services/normalBattleService";
import { Rank } from "../../../services/rankService";
import { getAllServerName } from "../../../services/redisService";
import { CheckMeterial } from "../../../services/role/checkMaterial";
import { checkGVGTask } from "../../../services/task/taskService";
export default function (app: Application) {
@@ -56,6 +58,8 @@ export class GVGProduceHandler {
const myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
const myUserDailyData = await GVGUserDailyDataModel.findByRole(configId, myLeague.leagueCode, roleId);
let groupKey = await getGroupKey(serverId);
let dicRankMap = gameData.gvgVestige.get(vestigeId);
@@ -77,7 +81,8 @@ export class GVGProduceHandler {
lineup, lineupCe,
oppPlayers,
refreshCnt,
usedHeroes
usedHeroes,
costGoldCnt: myUserDailyData?.costGoldCnt||0
})
}
@@ -191,14 +196,14 @@ export class GVGProduceHandler {
}
// 选择对手
async chooseOpp(msg: { vestigeId: number, roleId: string, rank: number, myRank: number }, session: BackendSession) {
async chooseOpp(msg: { vestigeId: number, roleId: string, rank: number, myRank: number, costGold: boolean }, session: BackendSession) {
let roleId = session.get('roleId');
let roleName = session.get('roleName');
let serverId = session.get('serverId');
let guildCode = session.get('guildCode');
let sid = session.get('sid');
let { vestigeId, roleId: targetRoleId, rank, myRank } = msg;
let { vestigeId, roleId: targetRoleId, rank, myRank, costGold } = msg;
let { configId, period } = getGVGPeriodData();
if(period != GVG_PERIOD.PREPARE) return resResult(STATUS.GVG_NOT_PREPARE_PERIOD);
@@ -217,8 +222,15 @@ export class GVGProduceHandler {
// 检查对手排名/自己排名
if(!checkVestigeRank(myRank, rank)) return resResult(STATUS.GVG_VESTIGE_RANK_ERR);
const hasItem = await GVGUserItemModel.checkItemCnt(configId, myLeague.leagueCode, roleId, GVG_ITEM.FIGHT_COIN, 1);
if(!hasItem) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
let goldCost = parseGoodStr(GVG.GVG_VESTIGE_BUY_COST);
if(costGold) {
let check = new CheckMeterial(roleId);
let isEnough = await check.decrease(goldCost);
if (!isEnough) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
} else {
const hasItem = await GVGUserItemModel.checkItemCnt(configId, myLeague.leagueCode, roleId, GVG_ITEM.FIGHT_COIN, 1);
if(!hasItem) return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
}
const groupKey = await getGroupKey(serverId);
let status = await checkVestigeOppStatus(configId, groupKey, vestigeId, roleId, myRank, targetRoleId, rank); // 锁
@@ -229,11 +241,12 @@ export class GVGProduceHandler {
}
// 扣征战令
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, costGold? []: [{ id: GVG_ITEM.FIGHT_COIN, count: 1 }], costGold? goldCost: [], ITEM_CHANGE_REASON.GVG_VESTIGE_START);
if(!costResult) {
await GVGVestigeLockModel.releaseLock(groupKey, vestigeId, rank);
return resResult(STATUS.GVG_ITEMS_NOT_ENOUGH);
}
let userDailyData = await GVGUserDailyDataModel.incCostGoldCnt(configId, myLeague.leagueCode, roleId, costGold);
// 获取征战令对应奖励
const leagueGoods = await addGVGReward(roleId, roleName, myLeague.leagueCode, sid, dicRank.battleLeagueReward, dicRank.battleReward, ITEM_CHANGE_REASON.GVG_VESTIGE_START);
// 消耗征战令的获得活跃
@@ -247,6 +260,7 @@ export class GVGProduceHandler {
checkGVGTask(serverId, roleId, sid, configId, myLeague.leagueCode, TASK_TYPE.GVG_VESTIGE, { count: 1 });
return resResult(STATUS.SUCCESS, {
active,
costGoldCnt: userDailyData?.costGoldCnt||0,
...oppDetail
});
}