import { Application, BackendSession, pinus } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts/statusCode'; import { getRoleOnlineInfo } from '../../../services/redisService'; import { addItems, createHeroes } from '../../../services/rewardService'; import { RewardInter } from '../../../pubUtils/interface'; import { getExpByLv } from '../../../pubUtils/data'; import { RoleModel } from '../../../db/Role'; let timer: NodeJS.Timer; export default function (app: Application) { return new GmRoleHandler(app); } export class GmRoleHandler { constructor(private app: Application) { } async addItems(msg: { roleId: string, roleName: string, serverId: number, values: { reward: RewardInter[], heroes: number[], lv: number }}, session: BackendSession) { let { roleId, roleName, serverId, values } = msg; let { reward, heroes, lv } = values; if (reward == undefined && heroes == undefined && lv == undefined) { return resResult(STATUS.WRONG_PARMS); } let connect = await getRoleOnlineInfo(roleId); let sid = connect.isOnline?connect.sid: null; if(reward &&reward.length > 0) { await addItems(roleId, roleName, sid, values.reward); } if(heroes && heroes.length > 0) { await createHeroes(roleId, roleName, sid, serverId, heroes.map(hid => { return { hid, count: 1 }})) } if(lv && lv > 0) { let exp = getExpByLv(lv)?.sum||0; await RoleModel.updateRoleInfo(roleId, { lv, exp }) let uids = [{ uid: roleId, sid }]; pinus.app.get('channelService').pushMessageByUids('onPlayerExpChange', resResult(STATUS.SUCCESS, { isLvUp: false, lv, exp }), uids); } return resResult(STATUS.SUCCESS); } }