96 lines
2.9 KiB
TypeScript
96 lines
2.9 KiB
TypeScript
import { Application, BackendSession } from 'pinus';
|
|
|
|
export default function(app: Application) {
|
|
return new ComBattleHandler(app);
|
|
}
|
|
|
|
export class ComBattleHandler {
|
|
constructor(private app: Application) {
|
|
}
|
|
private bossHp: number = 10000;
|
|
|
|
async startBattle(msg: {}, session: BackendSession) {
|
|
const battleId = Math.random().toString(36).slice(-8);
|
|
let roleId = session.get('roleId');
|
|
let roleName = session.get('roleName');
|
|
let sid = session.get('sid');
|
|
console.log('role in startBattle: ', roleId, roleName, battleId);
|
|
|
|
let channelService = this.app.get('channelService');
|
|
let channel = channelService.getChannel(battleId, true);
|
|
let users = channel.getMembers();
|
|
if (users.indexOf(roleId) === -1) {
|
|
channel.add(roleId, sid);
|
|
}
|
|
|
|
users = channel.getMembers();
|
|
channel.pushMessage('onAdd', {users});
|
|
let tsid = channel.getMember(roleId)['sid'];
|
|
channelService.pushMessageByUids('bossHp', {data: 'datadata'}, [{
|
|
uid: roleId,
|
|
sid: tsid
|
|
}]);
|
|
|
|
return {
|
|
code: 200,
|
|
data: {
|
|
users,
|
|
battleId
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Send messages to users
|
|
*
|
|
* @param {Object} msg message from client
|
|
* @param {Object} session
|
|
*
|
|
*/
|
|
async enterBattle(msg: {battleId: string , target: string}, session: BackendSession) {
|
|
let roleId = session.get('roleId');
|
|
let roleName = session.get('roleName');
|
|
let sid = session.get('sid');
|
|
console.log('role in enterBattle: ', roleId, roleName, msg, this.app.rpc);
|
|
|
|
let channelService = this.app.get('channelService');
|
|
let channel = channelService.getChannel(msg.battleId, false);
|
|
let users = channel.getMembers();
|
|
if (users.indexOf(roleId) === -1) {
|
|
channel.add(roleId, sid);
|
|
} else {
|
|
return {
|
|
code: 202,
|
|
data: '不能重复加入'
|
|
};
|
|
}
|
|
channel.pushMessage('onAddBattle', {users});
|
|
|
|
return {
|
|
code: 200,
|
|
data: users
|
|
}
|
|
}
|
|
|
|
async hurtHp(msg: {battleId: string, bossHurt: number, actorHurt: [{ actorId: number, actorHurt: number}]}, session: BackendSession) {
|
|
let roleId = session.get('roleId');
|
|
let roleName = session.get('roleName');
|
|
console.log('role in enterBattle: ', roleId, roleName, msg);
|
|
|
|
let channelService = this.app.get('channelService');
|
|
let channel = channelService.getChannel(msg.battleId, false);
|
|
|
|
this.bossHp -= msg.bossHurt;
|
|
if (this.bossHp < 0) {
|
|
this.bossHp = 0;
|
|
channel.pushMessage('bossHp', {data: 'boss 挂啦!!!!!'}, undefined);
|
|
}
|
|
channel.pushMessage('bossHp', {bossHp: this.bossHp}, undefined);
|
|
|
|
return {
|
|
code: 200,
|
|
data: this.bossHp
|
|
}
|
|
}
|
|
}
|