新武将:关卡
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 } }
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user