From 0ba79c2299b70a7f3efb26d0bf06ffb41f717b72 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Tue, 14 Jan 2025 02:18:53 +0100 Subject: [PATCH] Teleport fix --- src/events/map/characterMove.ts | 2 +- src/services/teleportService.ts | 27 ++++++++++++++++++++------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/events/map/characterMove.ts b/src/events/map/characterMove.ts index 21248d7..05be78a 100644 --- a/src/events/map/characterMove.ts +++ b/src/events/map/characterMove.ts @@ -55,7 +55,7 @@ export default class CharacterMove extends BaseEvent { if (mapEventTile?.type === 'BLOCK') break if (mapEventTile?.type === 'TELEPORT' && mapEventTile.teleport) { await this.handleMapEventTile(mapEventTile as MapEventTileWithTeleport) - break + return } // Update position first diff --git a/src/services/teleportService.ts b/src/services/teleportService.ts index cf1b441..36f4880 100644 --- a/src/services/teleportService.ts +++ b/src/services/teleportService.ts @@ -48,13 +48,6 @@ class TeleportService { const currentMapId = mapCharacter.character.map?.id const io = SocketManager.getIO() - // Handle current map cleanup - if (currentMapId) { - socket.leave(currentMapId) - MapManager.removeCharacter(characterId) - io.in(currentMapId).emit('map:character:leave', characterId) - } - // Update character position and map await mapCharacter .getCharacter() @@ -64,6 +57,26 @@ class TeleportService { .setMap(targetMap.getMap()) .save() + // If the current map is the target map and we are not joining, send move event + if (currentMapId === options.targetMapId && !options.isInitialJoin) { + // If the current map is the target map, send move event + io.in(currentMapId).emit('map:character:move', { + characterId: mapCharacter.character.id, + positionX: options.targetX, + positionY: options.targetY, + rotation: options.rotation ?? 0, + isMoving: false + }) + return true + } + + // Handle current map cleanup + if (currentMapId) { + socket.leave(currentMapId) + MapManager.removeCharacter(characterId) + io.in(currentMapId).emit('map:character:leave', characterId) + } + // Join new map socket.join(options.targetMapId) targetMap.addCharacter(mapCharacter.getCharacter())