diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index a6537b35d..2cb9ee67c 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -275,6 +275,7 @@ export class NormalBattleHandler { let roleId = session.get('roleId'); let roleName = session.get('roleName'); let sid = session.get('sid'); + let serverId = session.get('serverId'); let funcs: number[] = session.get('funcs'); let warInfo = gameData.war.get(battleId); if (!warInfo) { @@ -289,7 +290,7 @@ export class NormalBattleHandler { // 扣体力 let role = await RoleModel.findByRoleId(roleId, 'lv'); - let apJson = await setAp(roleId, role.lv, -1 * warInfo.cost * count, sid, funcs); // 扣除体力 + let apJson = await setAp(roleId, role.lv, -1 * warInfo.cost * count, sid, funcs); // 扣除体力 if (!apJson) { return resResult(STATUS.BATTLE_ACTION_POINT_LACK); } @@ -329,6 +330,8 @@ export class NormalBattleHandler { // 任务 await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_MAIN_SWEEP, battleId, [], count, 0); + //活动任务 + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.BATTLE_MAIN_SWEEP, 1, { battleId }) return resResult(STATUS.SUCCESS, { battleId, count, diff --git a/game-server/app/services/actionPointService.ts b/game-server/app/services/actionPointService.ts index 10eece1e7..de44d6fac 100644 --- a/game-server/app/services/actionPointService.ts +++ b/game-server/app/services/actionPointService.ts @@ -4,10 +4,11 @@ import { ActionPointModel } from '../db/ActionPoint'; import { TASK_TYPE, STATUS } from '../consts'; -import { checkTask } from './taskService'; +import { checkActivityTask, checkTask } from './taskService'; import { getDicApByLv } from '../pubUtils/data'; import { pinus } from 'pinus'; import { resResult } from '../pubUtils/util'; +import { RoleModel } from '../db/Role'; /** * 获取当前体力 @@ -20,21 +21,21 @@ export async function getAp(roleId: string, lv: number) { let dataAp = await ActionPointModel.getAp(roleId); const maxAp = dicAp.maxAp; // 最大体力值 const per = dicAp.perApRestoreTime * 1000; // 恢复时间(ms) - let {ap, refTime} = dataAp; - - if(ap >= maxAp) { + let { ap, refTime } = dataAp; + + if (ap >= maxAp) { // 体力溢出不需要做时间的处理 - return { ap, maxAp, refTime: now, apRemainTime:0, apMaxRemainTime: 0, isOver: true } + return { ap, maxAp, refTime: now, apRemainTime: 0, apMaxRemainTime: 0, isOver: true } } else { - if(refTime > now) refTime = now; // refTime:每次记录时候最近的一个整的时间点,绝对不会大于now - let n = Math.floor((now - refTime)/per); // 上次记录到现在可以增长多少体力 + if (refTime > now) refTime = now; // refTime:每次记录时候最近的一个整的时间点,绝对不会大于now + let n = Math.floor((now - refTime) / per); // 上次记录到现在可以增长多少体力 ap += n; // 增加上 - if(ap >= maxAp) { // 加上后溢出了 + if (ap >= maxAp) { // 加上后溢出了 ap = maxAp; - return { ap, maxAp, refTime: now, apRemainTime:0, apMaxRemainTime: 0, isOver: true } + return { ap, maxAp, refTime: now, apRemainTime: 0, apMaxRemainTime: 0, isOver: true } } else { refTime += n * per; // 更新refTime到离现在最近的一个整的时间点 - let apRemainTime = Math.floor((refTime + per - now)/1000); // 恢复下一点需要多少时间 + let apRemainTime = Math.floor((refTime + per - now) / 1000); // 恢复下一点需要多少时间 let apMaxRemainTime = (maxAp - ap - 1) * dicAp.perApRestoreTime + apRemainTime; return { ap, maxAp, refTime, apRemainTime, apMaxRemainTime, isOver: false } } @@ -55,24 +56,26 @@ export async function setAp(roleId: string, lv: number, changeAp: number, sid: s let ApResult = await getAp(roleId, lv); let { ap, maxAp, refTime, apRemainTime, apMaxRemainTime, isOver } = ApResult; // 更新ap ap += changeAp; - if(ap >= maxAp) { // 溢出 + if (ap >= maxAp) { // 溢出 refTime = now; apRemainTime = 0; apMaxRemainTime = 0; } - if(ap < 0) return null // 体力不足 + if (ap < 0) return null // 体力不足 await ActionPointModel.saveAp(roleId, ap, refTime); - if(isOver && ap < maxAp) { // 特殊处理,溢出之后做减少体力的操作时 + if (isOver && ap < maxAp) { // 特殊处理,溢出之后做减少体力的操作时 apRemainTime = dicAp.perApRestoreTime; - apMaxRemainTime = (maxAp - ap) * dicAp.perApRestoreTime; + apMaxRemainTime = (maxAp - ap) * dicAp.perApRestoreTime; } - if(changeAp < 0) { + if (changeAp < 0) { await checkTask(roleId, sid, funcs, TASK_TYPE.BATTLE_COST_AP, -1 * changeAp, true, {}); + let { serverId } = await RoleModel.findByRoleId(roleId); + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.BATTLE_COST_AP, -1 * changeAp,); } - let apJson = {ap, maxAp, refTime, apMaxRemainTime, apRemainTime}; - if(changeAp != 0) { + let apJson = { ap, maxAp, refTime, apMaxRemainTime, apRemainTime }; + if (changeAp != 0) { let uids = [{ uid: roleId, sid }]; pinus.app.get('channelService').pushMessageByUids('onApUpdate', resResult(STATUS.SUCCESS, { apJson }), uids); } diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index c53ecf0f8..d2927c26b 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -1203,6 +1203,16 @@ export function isComplete(roleId: string, taskType: TASK_TYPE, taskParam: strin addCount = count; break; } + case TASK_TYPE.BATTLE_COST_AP: + { + addCount = count; + break; + } + case TASK_TYPE.BATTLE_MAIN_SWEEP: + { + addCount = count; + break; + } default: addCount = 0;