diff --git a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts index e3db973cd..ff5bdbf92 100644 --- a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts +++ b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts @@ -232,7 +232,7 @@ export class ExpeditionBattleHandler { let warReward = new WarReward(roleId, roleName, battleId, isSuccess); let reward = await warReward.saveReward(1); - let actordata = await roleLevelup(roleId, warInfo.kingExp)// 主公升级经验 + let actordata = await roleLevelup(roleId, isSuccess?warInfo.kingExp:0);// 主公升级经验 return resResult(STATUS.SUCCESS, { expeditionCode, expeditionId, diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index 56c1c1991..810c47ca0 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -8,7 +8,7 @@ import { checkDaily, checkDailyAndIncrease } from '../../../services/dailyBattle import { checkTowerWar, towerBattleEnd } from '../../../services/battleService'; import { WarReward } from '../../../services/warRewardService'; import { getAp, setAp } from '../../../services/actionPointService'; -import { setBattleStatus } from '../../../services/eventSercive'; +import { setBattleStatus, checkEventBattle } from '../../../services/eventSercive'; import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; import { HeroModel } from '../../../db/Hero'; @@ -53,6 +53,7 @@ export class NormalBattleHandler { let checkHeroes = checkBattleHeroes(roleId, heroes); if(!checkHeroes) return resResult(STATUS.BATTLE_HERO_NOT_FOUND); + const battleCode = genCode(8); // 关卡唯一值 let dailyNum = {}; let towerData = {}; if(warInfo.warType == WAR_TYPE.DAILY) { @@ -63,12 +64,18 @@ export class NormalBattleHandler { dailyNum = { type: checkResult.type, count: checkResult.count, sum: checkResult.sum }; } else if (warInfo.warType == WAR_TYPE.TOWER) { let checkResult = await checkTowerWar(roleId, battleId, heroes); - if(checkResult.status) { + if(checkResult.status == -1) { return checkResult.resResult } towerData = Object.assign(towerData, checkResult.data); + } else if (warInfo.warType == WAR_TYPE.EVENT) { + // 记录事件状态 + let checkResult = await checkEventBattle( roleId, session.get('eventStatus'), battleId, battleCode); + if(checkResult.status == -1) { + return checkResult.resResult + } } - const battleCode = genCode(8); + const BattleRecord = await BattleRecordModel.updateBattleRecordByCode(battleCode, { $set: { roleId, roleName, battleId, @@ -204,6 +211,8 @@ export class NormalBattleHandler { let condition2 = await BattleRecordModel.getBattleRecordByIdAndStar(roleId, battleId, 3); if(!condition2) warReward.setCondition(1, true); } + + await updateWarStar(roleId, battleId, warInfo.warType, star); } let reward = await warReward.saveReward(1); @@ -213,9 +222,7 @@ export class NormalBattleHandler { }, true); let { status } = updateResult; - await updateWarStar(roleId, battleId, warInfo.warType, star); - - let actordata = await roleLevelup(roleId, warInfo.kingExp)// 主公升级经验 + let actordata = await roleLevelup(roleId, isSuccess?warInfo.kingExp:0);// 主公升级经验 let curHeroes = []; for(let hid of heroes) { diff --git a/game-server/app/services/eventSercive.ts b/game-server/app/services/eventSercive.ts index 74fd5b703..f677942c2 100644 --- a/game-server/app/services/eventSercive.ts +++ b/game-server/app/services/eventSercive.ts @@ -2,9 +2,30 @@ import { Application, FrontendOrBackendSession } from 'pinus'; import { getGamedata } from '../pubUtils/gamedata'; import EventRecord, { EventRecordModel } from '../db/EventRecord'; import { RoleModel } from '../db/Role'; -import { genCode, decodeStrSingle, decodeStr, getRandomWithWeight } from '../pubUtils/util'; +import { genCode, decodeStrSingle, decodeStr, getRandomWithWeight, resResult } from '../pubUtils/util'; import { EVENT_STATUS, EVENT_RECORD_STATUS, EVENT_TYPE, EVENT_RANDOM_TYPE_ONE_OPEN, EVENT_QUIZ_NUM, EVENT_ANSWER_STATUS } from '../consts/consts'; import { EVENT_REFRESH_NUM } from '../consts/consts'; +import { STATUS } from '../consts/statusCode'; + +/** + * 从检查接口调用,检查是否有这么个战斗,顺便保存一下battleCode + * + * @param roleId + * @param eventStatus + * @param battleId + * @param battleCode + */ +export async function checkEventBattle(roleId: string, eventStatus: number, battleId: number, battleCode: string) { + let now = new Date(); + let refTime = eventStatus == EVENT_STATUS.OPEN? getEventTime(now): 0; + + let result = await EventRecordModel.setBattleCode(roleId, battleId, refTime, battleCode); + if (!result) { + return { status: -1, resResult: resResult(STATUS.EVENT_INFO_NOT_FOUND) }; + } else { + return { status: 0, data: result }; + } +} /** * 从关卡结算接口调用,保存战斗情况 @@ -17,14 +38,14 @@ import { EVENT_REFRESH_NUM } from '../consts/consts'; * @param battleCode */ export async function setBattleStatus(app: Application, session: FrontendOrBackendSession, roleId: string, battleId: number , isSuccess: boolean, battleCode: string) { - let now = new Date(); - let eventStatus = session.get('eventStatus'); - let refTime = eventStatus == EVENT_STATUS.OPEN? getEventTime(now): 0; let { BATTLE_SUCCESS, BATTLE_FAIL } = EVENT_RECORD_STATUS; - let result = await EventRecordModel.setBattleStatus(roleId, battleId, refTime, isSuccess?BATTLE_SUCCESS:BATTLE_FAIL, battleCode); + let result = await EventRecordModel.setBattleStatus(roleId, battleId, battleCode, isSuccess?BATTLE_SUCCESS:BATTLE_FAIL); + if (!result) { + return { status: -1, resResult: resResult(STATUS.EVENT_INFO_NOT_FOUND) }; + } await checkEvent(app, session, true); - return result; + return { status: 0, data: result }; } /** @@ -34,8 +55,8 @@ export async function setBattleStatus(app: Application, session: FrontendOrBacke */ export function getEventTime(now: Date) { let curTime = Number(now); - let todayA = now.setHours(12, 0, 0, 0); // 每天12点 - let todayB = now.setHours(18, 0, 0, 0); // 每天18点 + let todayA = now.setHours(12, 0, 0, 0) - 8*60*60*1000; // 每天12点,修复时差 + let todayB = now.setHours(18, 0, 0, 0) - 8*60*60*1000; // 每天18点,修复时差 let yesterdayB = todayB - 86400000; // 前一天12点 let t = 0; if(curTime < todayA) { @@ -45,6 +66,7 @@ export function getEventTime(now: Date) { } else if (curTime >= todayB) { t = todayB; } + console.log('getEventTime', curTime, todayA, todayB, yesterdayB, t); return t } diff --git a/shared/db/EventRecord.ts b/shared/db/EventRecord.ts index ede6e949f..ca65fac58 100644 --- a/shared/db/EventRecord.ts +++ b/shared/db/EventRecord.ts @@ -75,8 +75,14 @@ export default class EventRecord extends BaseModel { return data; } - public static async setBattleStatus(roleId: string, battleId: number, refTime: number, status: number, battleCode: string , lean=true ) { - let result = await EventRecordModel.findOneAndUpdate({roleId, battleId, refTime}, {$set:{ status, battleCode }}).sort({turn: 1}).lean(lean); + public static async setBattleCode(roleId: string, battleId: number, refTime: number, battleCode: string , lean=true ) { + let result = await EventRecordModel.findOneAndUpdate({roleId, battleId, refTime}, {$set:{ battleCode }}).sort({turn: 1}).lean(lean); + return result; + } + + public static async setBattleStatus(roleId: string, battleId: number, battleCode: string, status: number , lean=true ) { + console.log('********', roleId, battleId, battleCode) + let result = await EventRecordModel.findOneAndUpdate({roleId, battleId, battleCode}, {$set:{ status }}).lean(lean); return result; } diff --git a/web-server/app/public/index.html b/web-server/app/public/index.html index a3cb27887..eedb5ac2f 100644 --- a/web-server/app/public/index.html +++ b/web-server/app/public/index.html @@ -31,12 +31,8 @@