新武将:关卡

This commit is contained in:
luying
2022-08-01 19:55:11 +08:00
parent 30ab30c97d
commit e2dd6852af
5 changed files with 51 additions and 61 deletions

View File

@@ -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,

View File

@@ -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<RewardParam> = 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<RewardParam> = 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
}));
}
}

View File

@@ -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 } }

View File

@@ -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;
}

View File

@@ -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;
}
}