From 8cca44a3b42fc17347d0b0a8a769059ab7b83989 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Wed, 12 Feb 2025 03:01:07 +0100 Subject: [PATCH] Don't attack if isMoving --- src/application/base/baseEvent.ts | 7 +++++++ src/events/map/characterAttack.ts | 12 ++++++++++-- src/managers/mapManager.ts | 12 ++++++------ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/application/base/baseEvent.ts b/src/application/base/baseEvent.ts index 84d6bc9..986b149 100644 --- a/src/application/base/baseEvent.ts +++ b/src/application/base/baseEvent.ts @@ -2,6 +2,8 @@ import { SocketEvent } from '@/application/enums' import Logger, { LoggerType } from '@/application/logger' import type { TSocket } from '@/application/types' import { Character } from '@/entities/character' +import MapManager from '@/managers/mapManager' +import type MapCharacter from '@/models/mapCharacter' import CharacterRepository from '@/repositories/characterRepository' import { Server } from 'socket.io' @@ -27,6 +29,11 @@ export abstract class BaseEvent { return false } + protected getMapCharacter(): MapCharacter | null { + if (!this.socket.characterId) return null + return MapManager.getCharacterById(this.socket.characterId) + } + protected async getCharacter(): Promise { if (!this.socket.characterId) return null const characterRepository = new CharacterRepository() diff --git a/src/events/map/characterAttack.ts b/src/events/map/characterAttack.ts index 111b228..4ded236 100644 --- a/src/events/map/characterAttack.ts +++ b/src/events/map/characterAttack.ts @@ -11,8 +11,16 @@ export default class CharacterMove extends BaseEvent { private async handleEvent(data: any, callback: (response: any) => void): Promise { try { - console.log('attack', this.socket.characterId) - await this.characterAttackService.attack(this.socket.characterId) + if (!this.socket.characterId) { + this.logger.error('map:character:attack error: Character not found or not initialized') + return + } + + // Don't attack if the character is already moving + if (this.getMapCharacter()?.isMoving) return + + // Start attack + await this.characterAttackService.attack(this.socket.characterId!) } catch (error) { this.logger.error('map:character:attack error', error) return callback(false) diff --git a/src/managers/mapManager.ts b/src/managers/mapManager.ts index 597a066..23705fa 100644 --- a/src/managers/mapManager.ts +++ b/src/managers/mapManager.ts @@ -37,12 +37,12 @@ class MapManager { return this.maps[mapId] } - public getCharacterById(characterId: UUID): MapCharacter | undefined { - for (const map of Object.values(this.maps)) { - const character = map.getCharactersInMap().find((char) => char.character.id === characterId) - if (character) return character - } - return undefined + public getCharacterById(characterId: UUID): MapCharacter | null { + return ( + Object.values(this.maps) + .flatMap((map) => map.getCharactersInMap()) + .find((char) => char.character.id === characterId) ?? null + ) } public removeCharacter(characterId: UUID): void {