内存同步数据版的共斗框架
This commit is contained in:
95
game-server/app/servers/battle/handler/comBattleHandler.ts
Normal file
95
game-server/app/servers/battle/handler/comBattleHandler.ts
Normal file
@@ -0,0 +1,95 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user