import { Application, BackendSession } from 'pinus'; import { getGamedata } from '../../../pubUtils/gamedata'; import EventRecord, { EventRecordModel } from '../../../db/EventRecord'; import { RoleModel } from '../../../db/Role'; import { EVENT_STATUS, EVENT_RECORD_STATUS } from '../../../consts/consts'; import { checkEvent, getEventTime, refreshEvent, checkEventStatus, getEventSuccessStatus } from '../../../services/eventSercive'; import { handleFixedReward } from '../../../services/rewardService'; export default function(app: Application) { return new EventBattleHandler(app); } export class EventBattleHandler { constructor(private app: Application) { } // 主动获取奇遇事件 async getEvents(msg: { }, session: BackendSession) { let roleId = session.get('roleId'); let roleName = session.get('roleName'); let eventStatus = session.get('eventStatus'); let now = new Date(); let t = getEventTime(now); console.log(t, eventStatus) let event: Array; if (eventStatus == EVENT_STATUS.STARTING) { event = await EventRecordModel.getEventRecordByTime(roleId, 0); } else if( eventStatus == EVENT_STATUS.OPEN ) { event = await EventRecordModel.getEventRecordByTime(roleId, t); if(event.length == 0) { // 刷新 const num = 3; // 每次刷3个 event = await refreshEvent(num, roleId, roleName, t); } } return { code: 200, data: { event } } } // 获取关卡列表 async receiveEventReward(msg: { eventId: number, eventCode: string, answer: number }, session: BackendSession) { const {eventId, eventCode, answer} = msg; let roleId = session.get('roleId'); let roleName = session.get('roleName'); let eventStatus = session.get('eventStatus'); let event = await EventRecordModel.getEventRecordByCode(roleId, eventCode); if(!event) { return { code: 202, data: '未找到记录' } } let { status, type, eventId: dataEventId, question } = event; let flag = checkEventStatus(type, status); if(!flag) { return { code: 202, data: '状态错误' } } let isSuccess = getEventSuccessStatus(type, status, {id:question?question.id:0, answer}); if(dataEventId != eventId) { return { code: 202, data: '事件id错误' } } let dicEvent = getGamedata('dic_zyz_event'); let curEvent = dicEvent.find(cur => cur.eventID == eventId); if(!curEvent) { return { code: 202, data: '未找到该事件' }; } // 保存状态 let result = await EventRecordModel.setStatusByCode(roleId, eventCode, isSuccess?EVENT_RECORD_STATUS.SUCCESS_RECEIVED:EVENT_RECORD_STATUS.FAIL_RECEIVED); // 保存奖励 let rewardStr = isSuccess?curEvent.winReward:curEvent.loseReward; let goods = await handleFixedReward(roleId, roleName, rewardStr, 1); if(eventStatus == EVENT_STATUS.STARTING) { // 如果是第一次开启的挑战,保存成开启状态 await RoleModel.setEventStatus(roleId, EVENT_STATUS.OPEN); // 第一场时间挑战完,开始正常刷新事件,所以刷新时间也重置起来 session.set('eventStatus', EVENT_STATUS.OPEN); session.push('eventStatus', () => {}); } // 推送消息刷新 await checkEvent(this.app, session, true); return { code: 200, data: { isSuccess, eventCode: result.eventCode, eventId: result.eventId, status: result.status, goods } } } }