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<Character | null> {
     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<void> {
     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 {