From e2dd6852af93ed11d69129a0db4db4eb901e18bb Mon Sep 17 00:00:00 2001 From: luying Date: Mon, 1 Aug 2022 19:55:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E6=AD=A6=E5=B0=86=EF=BC=9A=E5=85=B3?= =?UTF-8?q?=E5=8D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servers/activity/handler/gachaHandler.ts | 8 ++- .../activity/handler/newHeroGiftsHandler.ts | 51 +++++++++---------- .../battle/handler/normalBattleHandler.ts | 27 +++++----- .../app/services/activity/newHeroService.ts | 22 ++------ .../domain/activityField/newHeroGachaField.ts | 4 ++ 5 files changed, 51 insertions(+), 61 deletions(-) diff --git a/game-server/app/servers/activity/handler/gachaHandler.ts b/game-server/app/servers/activity/handler/gachaHandler.ts index 9fd81ddd0..7df4f6270 100644 --- a/game-server/app/servers/activity/handler/gachaHandler.ts +++ b/game-server/app/servers/activity/handler/gachaHandler.ts @@ -14,6 +14,7 @@ import { getActivityById } from "../../../services/activity/activityService"; import { checkTaskInGacha } from "../../../services/task/taskService"; import { createHeroes } from "../../../services/role/createHero"; import { getGuideGachaData } from "../../../services/activity/gachaService"; +import { getPlayerNewHeroGachaData } from "../../../services/activity/newHeroService"; export default function (app: Application) { new HandlerService(app, {}); @@ -226,7 +227,12 @@ export class GachaHandler { let dicHero = gameData.hero.get(pickHero); if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND); - let userGacha = await UserGachaModel.updateInfo(roleId, gachaId, activityId, { pickHero }) + if(activityId > 0) { + let data = await getPlayerNewHeroGachaData(activityId, serverId, roleId); + if(!data.isPickHero(pickHero)) return resResult(STATUS.GACHA_CAN_NOT_PICK); + } + + let userGacha = await UserGachaModel.updateInfo(roleId, gachaId, activityId, { pickHero }); return resResult(STATUS.SUCCESS, { gachaId, diff --git a/game-server/app/servers/activity/handler/newHeroGiftsHandler.ts b/game-server/app/servers/activity/handler/newHeroGiftsHandler.ts index 112305c0c..210176edf 100644 --- a/game-server/app/servers/activity/handler/newHeroGiftsHandler.ts +++ b/game-server/app/servers/activity/handler/newHeroGiftsHandler.ts @@ -42,33 +42,32 @@ export class NewHeroGiftsHandler { * @memberof NewHeroGiftsHandler */ async exchangePoint(msg: { activityId: number, index: number }, session: BackendSession) { - // const { activityId, index } = msg; - // const roleId = session.get('roleId'); - // const serverId = session.get('serverId'); - // const sid = session.get('sid'); - // const roleName = session.get('roleName'); - + const { activityId, index } = msg; + const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + const sid = session.get('sid'); + const roleName = session.get('roleName'); - // let playerData = await getPlayerNewHeroGiftsData(activityId, serverId, roleId) - // if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); + let playerData = await getPlayerNewHeroGiftsData(activityId, serverId, roleId) + if (!playerData) return resResult(STATUS.ACTIVITY_MISSING); - // let item = playerData.findItem(index); - // if (!item) { - // return resResult(STATUS.ACTIVITY_DATA_ERROR); - // } - // if (item.countMax <= item.buyCount) { - // return resResult(STATUS.ACTIVITY_MAX_COUNT); - // } - // if (item.consumePoint + playerData.consumeTotalPoint > playerData.totalPoint) { - // return resResult(STATUS.ACTIVITY_NO_POINT); - // } - // let rewardParamArr: Array = stringToRewardParam(item.reward); - // let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.NEW_HERO_EXCHANGE) - // await ActivityNewHeroGiftModel.addReceiveRecord(serverId, activityId, roleId, index, item.consumePoint); - // item.buyCount += 1; - // return resResult(STATUS.SUCCESS, Object.assign(result, { - // param: { activityId, index }, - // item: item, consumeTotalPoint: playerData.consumeTotalPoint + item.consumePoint - // })); + let item = playerData.findItem(index); + if (!item) { + return resResult(STATUS.ACTIVITY_DATA_ERROR); + } + if (item.countMax <= item.buyCount) { + return resResult(STATUS.ACTIVITY_MAX_COUNT); + } + if (playerData.consumePoint + playerData.consumeTotalPoint > playerData.totalPoint) { + return resResult(STATUS.ACTIVITY_NO_POINT); + } + let rewardParamArr: Array = stringToRewardParam(item.reward); + let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.NEW_HERO_EXCHANGE) + await ActivityNewHeroGiftModel.addReceiveRecord(serverId, activityId, roleId, index, playerData.consumePoint); + item.buyCount += 1; + return resResult(STATUS.SUCCESS, Object.assign(result, { + param: { activityId, index }, + item: item, consumeTotalPoint: playerData.consumeTotalPoint + playerData.consumePoint + })); } } diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index 5486f264f..8258eaee5 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -141,15 +141,14 @@ export class NormalBattleHandler { } // 关卡结算,记录使用的武将,获得奖励 - async battleEnd(msg: { battleCode: string, battleId: number, isSuccess: boolean, stars: number[], heroes: number[], activityId: number, pageIndex: number }, session: BackendSession) { - const { battleCode, battleId, isSuccess, heroes = [], stars = [], activityId, pageIndex } = msg; + async battleEnd(msg: { battleCode: string, battleId: number, isSuccess: boolean, stars: number[], heroes: number[], activityId: number }, session: BackendSession) { + const { battleCode, battleId, isSuccess, heroes = [], stars = [], activityId } = msg; let roleId = session.get('roleId'); let roleName = session.get('roleName'); let sid = session.get('sid'); let ip = session.get('ip'); let serverId = session.get('serverId'); - let skipReward = false;//是否跳过奖励结算 let warInfo = gameData.war.get(battleId); if (!warInfo) { return resResult(STATUS.BATTLE_MISS_INFO); @@ -158,6 +157,7 @@ export class NormalBattleHandler { if (warInfo.warType == WAR_TYPE.COM_BATTLE) { return resResult(STATUS.BATTLE_END_WRONG_TYPE); } + console.log('####### warInfo.warType', warInfo.warType) const BattleRecord = await BattleRecordModel.getBattleRecordByCode(battleCode, true); if (!BattleRecord || BattleRecord.status != 0) { @@ -180,13 +180,16 @@ export class NormalBattleHandler { } let { warStar } = role; + let isFirst = warStar.findIndex(cur => cur.id == battleId) == -1; + let curWarStar = warStar.find(cur => cur.id == battleId); + let { newWarStars, newStar } = calculateWarStar(warStar, battleId, stars); + let warReward = new WarReward(roleId, roleName, sid, battleId, isSuccess); let dailyNum = {}; let towerStatus = null; let dungeonNum = {}; if(warInfo.warType == WAR_TYPE.NORMAL || warInfo.warType == WAR_TYPE.MAIN_ELITE) { - let isFirst = warStar.findIndex(cur => cur.id == battleId) == -1; if(!isFirst) { let checkResult = await checkWarCountAndInc(battleId, isSuccess?1:0, role, false); if (checkResult.code != 0) { @@ -252,22 +255,19 @@ export class NormalBattleHandler { await challengeDailyGK(serverId, roleId, activityId, battleId) } } else if (warInfo.warType == WAR_TYPE.ACT_NEW_HERO_GK) { + console.log('##### warInfo.warType', warInfo.warType, isSuccess) if (isSuccess) { - let isFirst = await challengeNewHeroGK(serverId, roleId, activityId, pageIndex, battleId) - skipReward = !isFirst; + isFirst = await challengeNewHeroGK(serverId, roleId, activityId, battleId) } } else if (warInfo.warType == WAR_TYPE.ACT_TREASURE_HUNT) { if(isSuccess) { await treasureHuntChallengeConsume(serverId, roleId, sid); } } - let curWarStar = warStar.find(cur => cur.id == battleId); - let { newWarStars, newStar } = calculateWarStar(warStar, battleId, stars); if (isSuccess) { // 挑战胜利 // 是否首通 - let condition1 = warStar.find(cur => cur.id == battleId); - if (!condition1) { + if (!isFirst) { // await switchOnFunc(roleId, FUNC_OPT_TYPE.BATTLE_END, battleId, session); warReward.setCondition(0, true); reportTAEvent(roleId, TA_EVENT.GK_FIRST_PASS, { war_id: battleId, war_type: getWarTypeName(warInfo.warType), pass_time: Date.now(), pass_duration: nowSeconds() - getSeconds(createdAt), hero_list: dbHeroes }); @@ -275,7 +275,7 @@ export class NormalBattleHandler { pushVestigeFirstMsg(roleId, roleName, serverId, warInfo.warType, warInfo.war_id); } // 是否首次3星 - if (newStar == 3 && (!condition1 || condition1.star != 3)) { + if (newStar == 3 && (!isFirst || curWarStar.star != 3)) { warReward.setCondition(1, true); } @@ -284,10 +284,7 @@ export class NormalBattleHandler { } } - let reward = null; - if (!skipReward) { - reward = await warReward.saveReward(1); - } + let reward = await warReward.saveReward(1); const updateResult = await BattleRecordModel.updateBattleRecordByCode(battleCode, { $set: { status: isSuccess ? 1 : 2, star: newStar, stars, record: { heroes } } diff --git a/game-server/app/services/activity/newHeroService.ts b/game-server/app/services/activity/newHeroService.ts index 519861d6f..ff5c3edbc 100644 --- a/game-server/app/services/activity/newHeroService.ts +++ b/game-server/app/services/activity/newHeroService.ts @@ -61,25 +61,9 @@ import { getActivitiesByType, getActivityById } from './activityService'; * @param {number} warId 关卡id * */ -export async function challengeNewHeroGK(serverId: number, roleId: string, activityId: number, pageIndex: number, warId: number) { - let isFirst = false; - let activityData: ActivityModelType = await getActivityById(activityId); - let playerRecords = await ActivityNewHeroGKModel.findData(serverId, activityId, roleId); - let records = playerRecords && playerRecords.records ? playerRecords.records : []; - - let createTime = await getRoleCreateTime(roleId); - let serverTime = await getServerCreateTime(serverId); - let playerData = new NewHeroGKData(activityData, createTime, serverTime); - let item = playerData.findItemByGK(warId); - if (item) { - let recordIndex = records.findIndex(obj => { return obj.warId == warId }); - if (recordIndex == -1) { - isFirst = true; - await ActivityNewHeroGKModel.addRecord(serverId, activityId, roleId, warId); - } - } else { - console.log('challengeNewHeroGK没有找到对应关卡活动数据', activityId, warId) - } +export async function challengeNewHeroGK(serverId: number, roleId: string, activityId: number, warId: number) { + let data = await ActivityNewHeroGKModel.addRecord(serverId, activityId, roleId, warId); + let isFirst = data.records.filter(cur => cur.warId == warId).length <= 1; return isFirst; } diff --git a/shared/domain/activityField/newHeroGachaField.ts b/shared/domain/activityField/newHeroGachaField.ts index 51379a5c0..7d171c83c 100644 --- a/shared/domain/activityField/newHeroGachaField.ts +++ b/shared/domain/activityField/newHeroGachaField.ts @@ -49,4 +49,8 @@ export class NewHeroGachaData extends ActivityBase { this.pickHero = data.pickHero; this.pullCnt = data.pullCnt; } + + public isPickHero(hid: number) { + return this.heroes.findIndex(cur => cur.hid == hid) != -1; + } }