🐞 fix(gvg): 遗迹挑战次数添加元宝购买逻辑
This commit is contained in:
@@ -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
|
||||
});
|
||||
}
|
||||
|
||||
@@ -39,8 +39,11 @@ export default class GVGUserDailyData extends BaseModel {
|
||||
@prop({ required: true, default: 0 })
|
||||
hasLogin: boolean; // 是否登录
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
costGoldCnt: number; // 已使用元宝的次数
|
||||
|
||||
public static async findByRole(configId: number, leagueCode: string, roleId: string) {
|
||||
const result: GVGUserDailyDataType = await GVGUserDailyDataModel.findOne({ configId, leagueCode, roleId, time: getZeroPoint() }).select('food mineral wood score').lean();
|
||||
const result: GVGUserDailyDataType = await GVGUserDailyDataModel.findOne({ configId, leagueCode, roleId, time: getZeroPoint() }).select('food mineral wood score costGoldCnt').lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -66,6 +69,16 @@ export default class GVGUserDailyData extends BaseModel {
|
||||
const result: GVGUserDailyDataType = await GVGUserDailyDataModel.findOneAndUpdate({ configId, leagueCode, roleId, time: getZeroPoint()}, { $inc: { food, mineral, wood }}, { new: true, upsert: true }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async incCostGoldCnt(configId: number, leagueCode: string, roleId: string, costGold: boolean) {
|
||||
if(costGold) {
|
||||
const result: GVGUserDailyDataType = await GVGUserDailyDataModel.findOneAndUpdate({ configId, leagueCode, roleId, time: getZeroPoint() }, { $inc: { costGoldCnt: 1 } }, { new: true, upsert: true }).lean();
|
||||
return result;
|
||||
} else {
|
||||
const result: GVGUserDailyDataType = await GVGUserDailyDataModel.findOne({ configId, leagueCode, roleId, time: getZeroPoint() }).lean();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const GVGUserDailyDataModel = getModelForClass(GVGUserDailyData);
|
||||
|
||||
@@ -429,6 +429,8 @@ export const GVG = {
|
||||
GVG_REVIVE_GOLD: '1&100|2&100|3&100|4&100|5&100|6&100|7&100|8&100|9&100|10&100|11&200', // GVG激战期元宝购买复活的消耗,次数&元宝数
|
||||
GVG_VESTIGE_CHALLENGE_TIME: '5:00:00&22:00:00', // 征战中原遗迹可挑战时间
|
||||
GVG_DEFAULT_BATTLE_CD: 20, // 激战期战斗锁定时长,用于玩家退出时获取不到数据的情况
|
||||
GVG_VESTIGE_BUY_COST: "31002&200", // 每次购买消耗
|
||||
GVG_VESTIGE_BUY_LIMIT: 10, // 每日上限
|
||||
};
|
||||
export const PLATFORM_CONFIG = {
|
||||
OPEN_ANIMATION: 1, // 0关,1开(开场动画视频)
|
||||
|
||||
Reference in New Issue
Block a user