45 lines
1.8 KiB
TypeScript
45 lines
1.8 KiB
TypeScript
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);
|
|
}
|
|
|
|
} |