From 29dad4914a97f2b83999e42d3ed8d6740b2ed7ce Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Wed, 18 Sep 2024 20:51:20 +0200 Subject: [PATCH] Fixed up teleport command --- src/events/chat/gameMaster/teleportCommand.ts | 50 ++++++++----------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/src/events/chat/gameMaster/teleportCommand.ts b/src/events/chat/gameMaster/teleportCommand.ts index 23b67d8..3caea9e 100644 --- a/src/events/chat/gameMaster/teleportCommand.ts +++ b/src/events/chat/gameMaster/teleportCommand.ts @@ -23,57 +23,47 @@ export default class TeleportCommandEvent { private async handleTeleportCommand(data: TypePayload, callback: (response: boolean) => void): Promise { try { + if (!this.socket.character) { + this.socket.emit('notification', { title: 'Server message', message: 'Character not found' }) + return + } + if (!isCommand(data.message, 'teleport')) return const args = getArgs('teleport', data.message) if (!args || args.length !== 1) { - this.socket.emit('notification', { title: 'Teleport Error', message: 'Usage: /teleport ' }) + this.socket.emit('notification', { title: 'Server message', message: 'Usage: /teleport ' }) return } const zoneId = parseInt(args[0], 10) if (isNaN(zoneId)) { - this.socket.emit('notification', { title: 'Teleport Error', message: 'Invalid zone ID' }) - return - } - - const character = await CharacterRepository.getByUserAndId(this.socket.user?.id as number, this.socket.character?.id as number) - if (!character) { - this.socket.emit('notification', { title: 'Teleport Error', message: 'Character not found' }) + this.socket.emit('notification', { title: 'Server message', message: 'Invalid zone ID' }) return } const zone = await ZoneRepository.getById(zoneId) if (!zone) { - this.socket.emit('notification', { title: 'Teleport Error', message: 'Zone not found' }) + this.socket.emit('notification', { title: 'Server message', message: 'Zone not found' }) return } - this.io.to(character.zoneId.toString()).emit('zone:character:leave', character.id) - this.io.to(zone.id.toString()).emit('zone:character:join', character) - await CharacterManager.removeCharacter(character as ExtendedCharacter) - - this.socket.leave(character.zoneId.toString()) - this.socket.join(zone.id.toString()) + // Remove character from current zone + this.io.to(this.socket.character.zoneId.toString()).emit('zone:character:leave', this.socket.character.id) + this.socket.leave(this.socket.character.zoneId.toString()) + await CharacterManager.removeCharacter(this.socket.character) // Add character to new zone - character.zoneId = zone.id - character.positionX = 0 - character.positionY = 0 + this.io.to(zone.id.toString()).emit('zone:character:join', this.socket.character) + this.socket.join(zone.id.toString()) - // Update character in database - await prisma.character.update({ - where: { id: character.id }, - data: { - zoneId: character.zoneId, - positionX: 0, - positionY: 0 - } - }) + this.socket.character.zoneId = zone.id + this.socket.character.positionX = 0 + this.socket.character.positionY = 0 // Update character in CharacterManager - CharacterManager.initCharacter(character as ExtendedCharacter) + CharacterManager.initCharacter(this.socket.character) this.socket.emit('zone:teleport', { zone, @@ -81,12 +71,12 @@ export default class TeleportCommandEvent { }) this.socket.emit('notification', { title: 'Server message', message: `You have been teleported to ${zone.name}` }) - logger.info('teleport', `Character ${character.id} teleported to zone ${zone.id}`) + logger.info('teleport', `Character ${this.socket.character.id} teleported to zone ${zone.id}`) callback(true) } catch (error: any) { logger.error(`Error in teleport command: ${error.message}`) - this.socket.emit('notification', { title: 'Teleport Error', message: 'An error occurred while teleporting' }) + this.socket.emit('notification', { title: 'Server message', message: 'An error occurred while teleporting' }) } } } \ No newline at end of file