diff --git a/src/events/map/characterMove.ts b/src/events/map/characterMove.ts index 5f4e269..d432940 100644 --- a/src/events/map/characterMove.ts +++ b/src/events/map/characterMove.ts @@ -10,7 +10,9 @@ import TeleportService from '#services/characterTeleportService' export default class CharacterMove extends BaseEvent { private readonly characterService = CharacterService private readonly MOVEMENT_CANCEL_DELAY = 250 + private readonly MOVEMENT_THROTTLE = 100 // Minimum time between movement requests private movementTimeouts: Map = new Map() + private lastMovementTime: Map = new Map() // Track last movement time for each character public listen(): void { this.socket.on('map:character:move', this.handleEvent.bind(this)) @@ -23,6 +25,15 @@ export default class CharacterMove extends BaseEvent { return } + // Implement request throttling + const now = Date.now() + const lastMove = this.lastMovementTime.get(this.socket.characterId!) || 0 + if (now - lastMove < this.MOVEMENT_THROTTLE) { + this.logger.debug('Movement request throttled') + return + } + this.lastMovementTime.set(this.socket.characterId!, now) + // Clear any existing movement timeout const existingTimeout = this.movementTimeouts.get(this.socket.characterId!) if (existingTimeout) {