From 0fe060ff99977db5e040f1944761e8288d89efde Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Fri, 27 Dec 2024 03:36:45 +0100 Subject: [PATCH] More improvements --- src/application/base/baseEvent.ts | 4 ++++ src/managers/zoneManager.ts | 2 +- src/services/characterService.ts | 1 - src/services/userService.ts | 1 - src/socketEvents/character/connect.ts | 13 ++++++++----- src/socketEvents/chat/gameMaster/teleportCommand.ts | 2 +- src/socketEvents/chat/message.ts | 2 +- src/socketEvents/disconnect.ts | 2 +- src/socketEvents/zone/characterJoin.ts | 12 ++++-------- src/socketEvents/zone/characterLeave.ts | 7 ++----- src/socketEvents/zone/characterMove.ts | 4 ++-- src/socketEvents/zone/weather.ts | 2 +- 12 files changed, 25 insertions(+), 27 deletions(-) create mode 100644 src/application/base/baseEvent.ts diff --git a/src/application/base/baseEvent.ts b/src/application/base/baseEvent.ts new file mode 100644 index 0000000..74534b6 --- /dev/null +++ b/src/application/base/baseEvent.ts @@ -0,0 +1,4 @@ + +export abstract class BaseEvent { + +} \ No newline at end of file diff --git a/src/managers/zoneManager.ts b/src/managers/zoneManager.ts index e3995bd..a1e3a67 100644 --- a/src/managers/zoneManager.ts +++ b/src/managers/zoneManager.ts @@ -33,7 +33,7 @@ class ZoneManager { return this.zones.get(zoneId) } - public getCharacter(characterId: number): ZoneCharacter | undefined { + public getCharacterById(characterId: number): ZoneCharacter | undefined { for (const zone of this.zones.values()) { const character = zone.getCharactersInZone().find((char) => char.character.id === characterId) if (character) return character diff --git a/src/services/characterService.ts b/src/services/characterService.ts index f0df99a..e16ea66 100644 --- a/src/services/characterService.ts +++ b/src/services/characterService.ts @@ -1,6 +1,5 @@ import { AStar } from '#application/character/aStar' import Rotation from '#application/character/rotation' -import { Database } from '#application/database' import { appLogger, gameLogger } from '#application/logger' import { Character } from '#entities/character' import { Zone } from '#entities/zone' diff --git a/src/services/userService.ts b/src/services/userService.ts index 32a58f6..e88fb25 100644 --- a/src/services/userService.ts +++ b/src/services/userService.ts @@ -4,7 +4,6 @@ import NodeMailer from 'nodemailer' import PasswordResetTokenService from './passwordResetTokenService' // @TODO: Correctly implement this import config from '#application/config' -import { Database } from '#application/database' import { httpLogger } from '#application/logger' import { PasswordResetToken } from '#entities/passwordResetToken' import { User } from '#entities/user' diff --git a/src/socketEvents/character/connect.ts b/src/socketEvents/character/connect.ts index 11368bd..53e10fd 100644 --- a/src/socketEvents/character/connect.ts +++ b/src/socketEvents/character/connect.ts @@ -5,7 +5,6 @@ import { TSocket } from '#application/types' import ZoneManager from '#managers/zoneManager' import CharacterHairRepository from '#repositories/characterHairRepository' import CharacterRepository from '#repositories/characterRepository' -import { CharacterService } from '#services/characterService' interface CharacterConnectPayload { characterId: number @@ -29,7 +28,7 @@ export default class CharacterConnectEvent { } try { - if (await this.hasActiveCharacter()) { + if (await this.checkForActiveCharacters()) { this.emitError('You are already connected to another character') return } @@ -41,19 +40,23 @@ export default class CharacterConnectEvent { return } + // Set character id + this.socket.characterId = character.id + + // Set character hair const characterHair = await CharacterHairRepository.getById(characterHairId ?? 0) await character.setCharacterHair(characterHair).save() - this.socket.characterId = character.id + // Emit character connect event this.socket.emit('character:connect', character) } catch (error) { this.handleError('Failed to connect character', error) // @TODO : Make global error handler } } - private async hasActiveCharacter(): Promise { + private async checkForActiveCharacters(): Promise { const characters = await CharacterRepository.getByUserId(this.socket.userId!) - return characters?.some((char) => ZoneManager.getCharacter(char.id)) ?? false + return characters?.some((char) => ZoneManager.getCharacterById(char.id)) ?? false } private emitError(message: string): void { diff --git a/src/socketEvents/chat/gameMaster/teleportCommand.ts b/src/socketEvents/chat/gameMaster/teleportCommand.ts index 6930f9e..712ab94 100644 --- a/src/socketEvents/chat/gameMaster/teleportCommand.ts +++ b/src/socketEvents/chat/gameMaster/teleportCommand.ts @@ -25,7 +25,7 @@ export default class TeleportCommandEvent { private async handleTeleportCommand(data: TypePayload, callback: (response: boolean) => void): Promise { try { // Check if character exists - const zoneCharacter = ZoneManager.getCharacter(this.socket.characterId!) + const zoneCharacter = ZoneManager.getCharacterById(this.socket.characterId!) if (!zoneCharacter) { gameLogger.error('chat:message error', 'Character not found') return diff --git a/src/socketEvents/chat/message.ts b/src/socketEvents/chat/message.ts index f139b04..37a44ba 100644 --- a/src/socketEvents/chat/message.ts +++ b/src/socketEvents/chat/message.ts @@ -27,7 +27,7 @@ export default class ChatMessageEvent { return callback(false) } - const zoneCharacter = ZoneManager.getCharacter(this.socket.characterId!) + const zoneCharacter = ZoneManager.getCharacterById(this.socket.characterId!) if (!zoneCharacter) { gameLogger.error('chat:message error', 'Character not found') return callback(false) diff --git a/src/socketEvents/disconnect.ts b/src/socketEvents/disconnect.ts index 410ed84..a535d2d 100644 --- a/src/socketEvents/disconnect.ts +++ b/src/socketEvents/disconnect.ts @@ -23,7 +23,7 @@ export default class DisconnectEvent { this.io.emit('user:disconnect', this.socket.userId) - const zoneCharacter = ZoneManager.getCharacter(this.socket.characterId!) + const zoneCharacter = ZoneManager.getCharacterById(this.socket.characterId!) if (!zoneCharacter) { gameLogger.info('User disconnected but had no character set') return diff --git a/src/socketEvents/zone/characterJoin.ts b/src/socketEvents/zone/characterJoin.ts index 96267ad..b1d8bdf 100644 --- a/src/socketEvents/zone/characterJoin.ts +++ b/src/socketEvents/zone/characterJoin.ts @@ -37,18 +37,14 @@ export default class CharacterJoinEvent { return } - /** - * @TODO: If zone is not found, spawn back to the start - */ - const zone = await ZoneRepository.getById(character.zone!.id) + const zone = character.zone + if (!zone) { + // @TODO: If zone is not found, spawn back to the start gameLogger.error('zone:character:join error', 'Zone not found') return } - /** - * @TODO: If zone is not found, spawn back to the start - */ const loadedZone = ZoneManager.getZoneById(zone.id) if (!loadedZone) { gameLogger.error('zone:character:join error', 'Loaded zone not found') @@ -60,7 +56,7 @@ export default class CharacterJoinEvent { this.socket.join(zone.id.toString()) // Let other clients know of new character - this.io.to(zone.id.toString()).emit('zone:character:join', zoneManager.getCharacter(character.id)) + this.io.to(zone.id.toString()).emit('zone:character:join', zoneManager.getCharacterById(character.id)) // Log gameLogger.info(`User ${character.id} joined zone ${zone.id}`) diff --git a/src/socketEvents/zone/characterLeave.ts b/src/socketEvents/zone/characterLeave.ts index 6160d8b..5f13eb8 100644 --- a/src/socketEvents/zone/characterLeave.ts +++ b/src/socketEvents/zone/characterLeave.ts @@ -7,10 +7,7 @@ import CharacterRepository from '#repositories/characterRepository' import ZoneRepository from '#repositories/zoneRepository' export default class ZoneLeaveEvent { - constructor( - private readonly io: Server, - private readonly socket: TSocket - ) {} + constructor(private readonly io: Server, private readonly socket: TSocket) {} public listen(): void { this.socket.on('zone:character:leave', this.handleZoneLeave.bind(this)) @@ -32,7 +29,7 @@ export default class ZoneLeaveEvent { /** * @TODO: If zone is not found, spawn back to the start */ - const zone = await ZoneRepository.getById(character.zoneId) + const zone = character.zone if (!zone) { gameLogger.error('zone:character:join error', 'Zone not found') return diff --git a/src/socketEvents/zone/characterMove.ts b/src/socketEvents/zone/characterMove.ts index 55faf62..0524380 100644 --- a/src/socketEvents/zone/characterMove.ts +++ b/src/socketEvents/zone/characterMove.ts @@ -23,7 +23,7 @@ export default class CharacterMove { } private async handleCharacterMove({ positionX, positionY }: { positionX: number; positionY: number }): Promise { - const zoneCharacter = ZoneManager.getCharacter(this.socket.characterId!) + const zoneCharacter = ZoneManager.getCharacterById(this.socket.characterId!) if (!zoneCharacter?.character) { gameLogger.error('character:move error', 'Character not found or not initialized') return @@ -88,7 +88,7 @@ export default class CharacterMove { } private async handleZoneEventTile(zoneEventTile: ZoneEventTileWithTeleport): Promise { - const zoneCharacter = ZoneManager.getCharacter(this.socket.characterId!) + const zoneCharacter = ZoneManager.getCharacterById(this.socket.characterId!) if (!zoneCharacter) { gameLogger.error('character:move error', 'Character not found') return diff --git a/src/socketEvents/zone/weather.ts b/src/socketEvents/zone/weather.ts index a11532d..f36f5f9 100644 --- a/src/socketEvents/zone/weather.ts +++ b/src/socketEvents/zone/weather.ts @@ -16,7 +16,7 @@ export default class Weather { private async handleEvent(): Promise { try { - const weather = await WeatherManager.getWeatherState() + const weather = WeatherManager.getWeatherState() this.socket.emit('weather', weather) } catch (error: any) { gameLogger.error('error', error.message)