Renamed zone > map

This commit is contained in:
2025-01-02 17:31:24 +01:00
parent 887da447e0
commit 11041fec83
54 changed files with 871 additions and 895 deletions

View File

@ -2,11 +2,11 @@ import Logger, { LoggerType } from '#application/logger'
import { UUID } from '#application/types'
import { Character } from '#entities/character'
import SocketManager from '#managers/socketManager'
import ZoneManager from '#managers/zoneManager'
import ZoneCharacter from '#models/zoneCharacter'
import MapManager from '#managers/mapManager'
import MapCharacter from '#models/mapCharacter'
interface TeleportOptions {
targetZoneId: UUID
targetMapId: UUID
targetX: number
targetY: number
rotation?: number
@ -18,13 +18,13 @@ class TeleportService {
private readonly logger = Logger.type(LoggerType.GAME)
public async teleportCharacter(characterId: UUID, options: TeleportOptions): Promise<boolean> {
const { targetZoneId, targetX, targetY, rotation = 0, isInitialJoin = false, character } = options
const { targetMapId, targetX, targetY, rotation = 0, isInitialJoin = false, character } = options
const socket = SocketManager.getSocketByCharacterId(characterId)
const targetZone = ZoneManager.getZoneById(targetZoneId)
const targetMap = MapManager.getMapById(targetMapId)
if (!socket || !targetZone) {
this.logger.error(`Teleport failed - Missing socket or target zone for character ${characterId}`)
if (!socket || !targetMap) {
this.logger.error(`Teleport failed - Missing socket or target map for character ${characterId}`)
return false
}
@ -33,40 +33,40 @@ class TeleportService {
return false
}
const existingCharacter = !isInitialJoin && ZoneManager.getCharacterById(characterId)
const zoneCharacter = isInitialJoin
? new ZoneCharacter(character!)
const existingCharacter = !isInitialJoin && MapManager.getCharacterById(characterId)
const mapCharacter = isInitialJoin
? new MapCharacter(character!)
: existingCharacter ||
(() => {
this.logger.error(`Teleport failed - Character ${characterId} not found in ZoneManager`)
this.logger.error(`Teleport failed - Character ${characterId} not found in MapManager`)
return null
})()
if (!zoneCharacter) return false
if (!mapCharacter) return false
try {
const currentZoneId = zoneCharacter.character.zone?.id
const currentMapId = mapCharacter.character.map?.id
const io = SocketManager.getIO()
// Handle current zone cleanup
if (currentZoneId) {
socket.leave(currentZoneId)
ZoneManager.removeCharacter(characterId)
io.in(currentZoneId).emit('zone:character:leave', characterId)
// Handle current map cleanup
if (currentMapId) {
socket.leave(currentMapId)
MapManager.removeCharacter(characterId)
io.in(currentMapId).emit('map:character:leave', characterId)
}
// Update character position and zone
await zoneCharacter.character.setPositionX(targetX).setPositionY(targetY).setRotation(rotation).setZone(targetZone.getZone()).update()
// Update character position and map
await mapCharacter.character.setPositionX(targetX).setPositionY(targetY).setRotation(rotation).setMap(targetMap.getMap()).update()
// Join new zone
socket.join(targetZoneId)
targetZone.addCharacter(zoneCharacter.character)
// Join new map
socket.join(targetMapId)
targetMap.addCharacter(mapCharacter.character)
// Notify clients
io.in(targetZoneId).emit('zone:character:join', zoneCharacter)
socket.emit('zone:character:teleport', {
zone: targetZone.getZone(),
characters: targetZone.getCharactersInZone()
io.in(targetMapId).emit('map:character:join', mapCharacter)
socket.emit('map:character:teleport', {
map: targetMap.getMap(),
characters: targetMap.getCharactersInMap()
})
return true