新武将:关卡
This commit is contained in:
@@ -14,6 +14,7 @@ import { getActivityById } from "../../../services/activity/activityService";
|
|||||||
import { checkTaskInGacha } from "../../../services/task/taskService";
|
import { checkTaskInGacha } from "../../../services/task/taskService";
|
||||||
import { createHeroes } from "../../../services/role/createHero";
|
import { createHeroes } from "../../../services/role/createHero";
|
||||||
import { getGuideGachaData } from "../../../services/activity/gachaService";
|
import { getGuideGachaData } from "../../../services/activity/gachaService";
|
||||||
|
import { getPlayerNewHeroGachaData } from "../../../services/activity/newHeroService";
|
||||||
|
|
||||||
export default function (app: Application) {
|
export default function (app: Application) {
|
||||||
new HandlerService(app, {});
|
new HandlerService(app, {});
|
||||||
@@ -226,7 +227,12 @@ export class GachaHandler {
|
|||||||
let dicHero = gameData.hero.get(pickHero);
|
let dicHero = gameData.hero.get(pickHero);
|
||||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
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, {
|
return resResult(STATUS.SUCCESS, {
|
||||||
gachaId,
|
gachaId,
|
||||||
|
|||||||
@@ -42,33 +42,32 @@ export class NewHeroGiftsHandler {
|
|||||||
* @memberof NewHeroGiftsHandler
|
* @memberof NewHeroGiftsHandler
|
||||||
*/
|
*/
|
||||||
async exchangePoint(msg: { activityId: number, index: number }, session: BackendSession) {
|
async exchangePoint(msg: { activityId: number, index: number }, session: BackendSession) {
|
||||||
// const { activityId, index } = msg;
|
const { activityId, index } = msg;
|
||||||
// const roleId = session.get('roleId');
|
const roleId = session.get('roleId');
|
||||||
// const serverId = session.get('serverId');
|
const serverId = session.get('serverId');
|
||||||
// const sid = session.get('sid');
|
const sid = session.get('sid');
|
||||||
// const roleName = session.get('roleName');
|
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)
|
let item = playerData.findItem(index);
|
||||||
// if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
|
if (!item) {
|
||||||
|
return resResult(STATUS.ACTIVITY_DATA_ERROR);
|
||||||
// let item = playerData.findItem(index);
|
}
|
||||||
// if (!item) {
|
if (item.countMax <= item.buyCount) {
|
||||||
// return resResult(STATUS.ACTIVITY_DATA_ERROR);
|
return resResult(STATUS.ACTIVITY_MAX_COUNT);
|
||||||
// }
|
}
|
||||||
// if (item.countMax <= item.buyCount) {
|
if (playerData.consumePoint + playerData.consumeTotalPoint > playerData.totalPoint) {
|
||||||
// return resResult(STATUS.ACTIVITY_MAX_COUNT);
|
return resResult(STATUS.ACTIVITY_NO_POINT);
|
||||||
// }
|
}
|
||||||
// if (item.consumePoint + playerData.consumeTotalPoint > playerData.totalPoint) {
|
let rewardParamArr: Array<RewardParam> = stringToRewardParam(item.reward);
|
||||||
// return resResult(STATUS.ACTIVITY_NO_POINT);
|
let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.NEW_HERO_EXCHANGE)
|
||||||
// }
|
await ActivityNewHeroGiftModel.addReceiveRecord(serverId, activityId, roleId, index, playerData.consumePoint);
|
||||||
// let rewardParamArr: Array<RewardParam> = stringToRewardParam(item.reward);
|
item.buyCount += 1;
|
||||||
// let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.NEW_HERO_EXCHANGE)
|
return resResult(STATUS.SUCCESS, Object.assign(result, {
|
||||||
// await ActivityNewHeroGiftModel.addReceiveRecord(serverId, activityId, roleId, index, item.consumePoint);
|
param: { activityId, index },
|
||||||
// item.buyCount += 1;
|
item: item, consumeTotalPoint: playerData.consumeTotalPoint + playerData.consumePoint
|
||||||
// return resResult(STATUS.SUCCESS, Object.assign(result, {
|
}));
|
||||||
// param: { activityId, index },
|
|
||||||
// item: item, consumeTotalPoint: playerData.consumeTotalPoint + item.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) {
|
async battleEnd(msg: { battleCode: string, battleId: number, isSuccess: boolean, stars: number[], heroes: number[], activityId: number }, session: BackendSession) {
|
||||||
const { battleCode, battleId, isSuccess, heroes = [], stars = [], activityId, pageIndex } = msg;
|
const { battleCode, battleId, isSuccess, heroes = [], stars = [], activityId } = msg;
|
||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let roleName = session.get('roleName');
|
let roleName = session.get('roleName');
|
||||||
let sid = session.get('sid');
|
let sid = session.get('sid');
|
||||||
let ip = session.get('ip');
|
let ip = session.get('ip');
|
||||||
let serverId = session.get('serverId');
|
let serverId = session.get('serverId');
|
||||||
|
|
||||||
let skipReward = false;//是否跳过奖励结算
|
|
||||||
let warInfo = gameData.war.get(battleId);
|
let warInfo = gameData.war.get(battleId);
|
||||||
if (!warInfo) {
|
if (!warInfo) {
|
||||||
return resResult(STATUS.BATTLE_MISS_INFO);
|
return resResult(STATUS.BATTLE_MISS_INFO);
|
||||||
@@ -158,6 +157,7 @@ export class NormalBattleHandler {
|
|||||||
if (warInfo.warType == WAR_TYPE.COM_BATTLE) {
|
if (warInfo.warType == WAR_TYPE.COM_BATTLE) {
|
||||||
return resResult(STATUS.BATTLE_END_WRONG_TYPE);
|
return resResult(STATUS.BATTLE_END_WRONG_TYPE);
|
||||||
}
|
}
|
||||||
|
console.log('####### warInfo.warType', warInfo.warType)
|
||||||
|
|
||||||
const BattleRecord = await BattleRecordModel.getBattleRecordByCode(battleCode, true);
|
const BattleRecord = await BattleRecordModel.getBattleRecordByCode(battleCode, true);
|
||||||
if (!BattleRecord || BattleRecord.status != 0) {
|
if (!BattleRecord || BattleRecord.status != 0) {
|
||||||
@@ -180,13 +180,16 @@ export class NormalBattleHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let { warStar } = role;
|
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 warReward = new WarReward(roleId, roleName, sid, battleId, isSuccess);
|
||||||
|
|
||||||
let dailyNum = {};
|
let dailyNum = {};
|
||||||
let towerStatus = null;
|
let towerStatus = null;
|
||||||
let dungeonNum = {};
|
let dungeonNum = {};
|
||||||
if(warInfo.warType == WAR_TYPE.NORMAL || warInfo.warType == WAR_TYPE.MAIN_ELITE) {
|
if(warInfo.warType == WAR_TYPE.NORMAL || warInfo.warType == WAR_TYPE.MAIN_ELITE) {
|
||||||
let isFirst = warStar.findIndex(cur => cur.id == battleId) == -1;
|
|
||||||
if(!isFirst) {
|
if(!isFirst) {
|
||||||
let checkResult = await checkWarCountAndInc(battleId, isSuccess?1:0, role, false);
|
let checkResult = await checkWarCountAndInc(battleId, isSuccess?1:0, role, false);
|
||||||
if (checkResult.code != 0) {
|
if (checkResult.code != 0) {
|
||||||
@@ -252,22 +255,19 @@ export class NormalBattleHandler {
|
|||||||
await challengeDailyGK(serverId, roleId, activityId, battleId)
|
await challengeDailyGK(serverId, roleId, activityId, battleId)
|
||||||
}
|
}
|
||||||
} else if (warInfo.warType == WAR_TYPE.ACT_NEW_HERO_GK) {
|
} else if (warInfo.warType == WAR_TYPE.ACT_NEW_HERO_GK) {
|
||||||
|
console.log('##### warInfo.warType', warInfo.warType, isSuccess)
|
||||||
if (isSuccess) {
|
if (isSuccess) {
|
||||||
let isFirst = await challengeNewHeroGK(serverId, roleId, activityId, pageIndex, battleId)
|
isFirst = await challengeNewHeroGK(serverId, roleId, activityId, battleId)
|
||||||
skipReward = !isFirst;
|
|
||||||
}
|
}
|
||||||
} else if (warInfo.warType == WAR_TYPE.ACT_TREASURE_HUNT) {
|
} else if (warInfo.warType == WAR_TYPE.ACT_TREASURE_HUNT) {
|
||||||
if(isSuccess) {
|
if(isSuccess) {
|
||||||
await treasureHuntChallengeConsume(serverId, roleId, sid);
|
await treasureHuntChallengeConsume(serverId, roleId, sid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let curWarStar = warStar.find(cur => cur.id == battleId);
|
|
||||||
let { newWarStars, newStar } = calculateWarStar(warStar, battleId, stars);
|
|
||||||
|
|
||||||
if (isSuccess) { // 挑战胜利
|
if (isSuccess) { // 挑战胜利
|
||||||
// 是否首通
|
// 是否首通
|
||||||
let condition1 = warStar.find(cur => cur.id == battleId);
|
if (!isFirst) {
|
||||||
if (!condition1) {
|
|
||||||
// await switchOnFunc(roleId, FUNC_OPT_TYPE.BATTLE_END, battleId, session);
|
// await switchOnFunc(roleId, FUNC_OPT_TYPE.BATTLE_END, battleId, session);
|
||||||
warReward.setCondition(0, true);
|
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 });
|
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);
|
pushVestigeFirstMsg(roleId, roleName, serverId, warInfo.warType, warInfo.war_id);
|
||||||
}
|
}
|
||||||
// 是否首次3星
|
// 是否首次3星
|
||||||
if (newStar == 3 && (!condition1 || condition1.star != 3)) {
|
if (newStar == 3 && (!isFirst || curWarStar.star != 3)) {
|
||||||
warReward.setCondition(1, true);
|
warReward.setCondition(1, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -284,10 +284,7 @@ export class NormalBattleHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let reward = null;
|
let reward = await warReward.saveReward(1);
|
||||||
if (!skipReward) {
|
|
||||||
reward = await warReward.saveReward(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
const updateResult = await BattleRecordModel.updateBattleRecordByCode(battleCode, {
|
const updateResult = await BattleRecordModel.updateBattleRecordByCode(battleCode, {
|
||||||
$set: { status: isSuccess ? 1 : 2, star: newStar, stars, record: { heroes } }
|
$set: { status: isSuccess ? 1 : 2, star: newStar, stars, record: { heroes } }
|
||||||
|
|||||||
@@ -61,25 +61,9 @@ import { getActivitiesByType, getActivityById } from './activityService';
|
|||||||
* @param {number} warId 关卡id
|
* @param {number} warId 关卡id
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
export async function challengeNewHeroGK(serverId: number, roleId: string, activityId: number, pageIndex: number, warId: number) {
|
export async function challengeNewHeroGK(serverId: number, roleId: string, activityId: number, warId: number) {
|
||||||
let isFirst = false;
|
let data = await ActivityNewHeroGKModel.addRecord(serverId, activityId, roleId, warId);
|
||||||
let activityData: ActivityModelType = await getActivityById(activityId);
|
let isFirst = data.records.filter(cur => cur.warId == warId).length <= 1;
|
||||||
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)
|
|
||||||
}
|
|
||||||
return isFirst;
|
return isFirst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,4 +49,8 @@ export class NewHeroGachaData extends ActivityBase {
|
|||||||
this.pickHero = data.pickHero;
|
this.pickHero = data.pickHero;
|
||||||
this.pullCnt = data.pullCnt;
|
this.pullCnt = data.pullCnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public isPickHero(hid: number) {
|
||||||
|
return this.heroes.findIndex(cur => cur.hid == hid) != -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user